AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 842619
Accepted
Josh
Josh
Asked: 2017-04-05 16:07:12 +0800 CST2017-04-05 16:07:12 +0800 CST 2017-04-05 16:07:12 +0800 CST

如何允许 iptables 正确使用隧道而不是 NAT?

  • 772

我有两个通过点对点隧道连接的 NAT 网络,如下所示:

  | Machine A  |                                         | Machine B  |
  | 1.2.3.4    |<-10.101.3.2-------tun------10.101.3.1-> | 4.5.6.7    |
  | 10.110.0.1 |                                         | 10.100.1.1 |
  -----+--------                                         --------+-----
       |                                                         |
 [ 10.110.1.0/24 net ]                                   [ 10.100.0.0/16 net]

机器 A 有一个公共 IPeth0和一个私有 IP 10.110.1.1,vmbr0并通过 ptp VPN 通过互联网与机器 B 连接,机器 B 有一个公共 IPen0和一个私有 IP en1(以及许多其他私有网络)

两个 LAN 上都有客户端使用带有两个公共 IP 的 NAT。这工作正常。(使用机器 A 上的 iptables 和机器 B 上的 pfSense 完成)

路由设置为机器 A 可以 ping 机器 B 的私有 ip 10.100.1.1 ,并且可以访问网络 B 上的所有主机10.100.0.0/16。同样,机器 B(以及网络 B 上的所有主机)可以访问机器 A,以及网络 A 上的所有主机10.110.1.0/16

但是,网络 A 上的主机无法与网络 B 上的主机建立连接(EG10.110.1.2无法 ping 或 SSH 到10.100.10.50)

我怀疑这与 A 上的 iptables 设置有关,因为 SSH from 10.100.10.50 to10.110.1.2可以工作,但我不能然后反向 SSH。这对我说,我的 iptables FILTER 规则RELATED,ESTABLISHED有效,但不知何故,我怀疑机器 A 正在尝试 NAT 并eth0用于新连接。

我在所有我认为需要的地方添加了ACCEPT destination 10.100.0.0/16iptables 规则,然后即使在我认为当事情不工作时不需要它们的地方,仍然无法从网络 A 到网络 B 的传出连接正常工作。

如何使用 iptables 通过点对点隧道正确连接两个经过 NAT 的专用网络?


附加信息:

机器 A 上的 iptables:

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             10.100.0.0/16       
DNAT       tcp  --  anywhere             anywhere             tcp dpt:http to:10.110.1.3:80
DNAT       tcp  --  anywhere             anywhere             tcp dpt:https to:10.110.1.3:443
DNAT       tcp  --  anywhere             anywhere             tcp dpt:xmpp-client to:10.110.1.4:5222
DNAT       tcp  --  anywhere             anywhere             tcp dpt:5281 to:10.110.1.4:5281
DNAT       tcp  --  anywhere             anywhere             tcp dpt:64738 to:10.110.1.4:64738
DNAT       udp  --  anywhere             anywhere             udp dpt:64738 to:10.110.1.4:64738
DNAT       udp  --  anywhere             anywhere             udp multiport dports isakmp,ipsec-nat-t to:10.110.1.10:1194

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             10.100.0.0/16       
ACCEPT     all  --  anywhere             10.101.0.0/16       
MASQUERADE  all  --  10.110.1.0/24        anywhere            
MASQUERADE  all  --  10.110.1.0/24        anywhere            
MASQUERADE  all  --  10.110.1.0/24        anywhere  
iptables
  • 1 1 个回答
  • 2044 Views

1 个回答

  • Voted
  1. Best Answer
    Josh
    2017-04-06T08:07:33+08:002017-04-06T08:07:33+08:00

    Sooo,这是我的一个愚蠢的错误!机器 A 上的一切都设置正确,实际上是机器 B 的防火墙规则阻止了这一点。机器 B 有一条允许来自 的流量的规则,10.101.3.2但缺少允许来自 的流量的规则10.110.1.0/24。添加该规则更正了该问题。


    我使用以下方法发现了tcpdump问题nc:

    1. 在10.100.10.50我执行nc -kl 60321侦听端口 60321 上的连接时(我选择了一个我知道我们运行的服务没有使用的随机端口,以最大程度地减少噪音tcpdump)
    2. 在机器 A 和 BI 上执行tcpdump -s0 -X -i $dev port 60321,我设置$dev为 NAT'ed 网络的接口(vmbr0或vmx0)或 ptp 接口(tun0)
    3. 在10.110.1.2我发送数据以10.100.10.50使用:echo -e "test1\ntest2\ntest3" | nc 10.100.10.50 60321
    4. 我看到机器 A 的 LAN 上的流量,包括机器 A 和 B 的tun0接口,但没有在机器 B 的 LAN 上,这意味着问题出在机器 B 上的路由/防火墙上
    5. 我面对并添加了缺少的防火墙规则
    • 1

相关问题

  • OpenVPN 的 Linux IP 转发 - 正确的防火墙设置?

  • iptables 单个规则中的多个源 IP

  • 存储 iptables 规则的规范方法是什么

  • 使用 iptables 和 dhcpd 进行端口转发

  • 根据 Apache 日志数据自动修改 iptables 以阻止行为不良的客户端

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve