我有两个 Linux,同在一个 172.17.0.0/16 的网络中,
A:172.17.82.13 - 可以上互联网
C:172.17.10.109 - 不能上互联网(可能是防火墙某种设定)
为了 C 也能上网,在 A 上开启了 ip forwarding,同时 C 的默认网关指向 A, A 的 iptables 开启了 nat 转换:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
也试过:
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.17.82.13
但 C 还是上不了网,通过 tcpdump 抓包发现,C 的包 A 收到了,A 也把包转发出去了,甚至收到了回包,但是到这里就断了,A 把这个回包吞了,并没有回给 C,这是怎么回事? 我也照着网上一些资料设置了下面的规则,也不起作用。
iptables -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
有没有 iptables 大佬能够指点一二,截图发不了,就是 C ping A 没有问题,ping 114.114.114.114 的时候,C 上的 tcpdump 只有 icmp 发包,A 上则有 C 的 icmp 请求的 114 的回复。
1
V69EX 2020-04-11 20:51:13 +08:00
A 只有一块网卡么?两块网卡最省事,直接在第二块网卡上配一个新网段,比如 192.168.9.1/24,然后新 C 配置为 192.168.9.2/24,然后随便一折腾就好了。
如果 A 仅一块网卡,你至少得添加一个网卡 alias,然后再配新网段。 你要记住,这种情况下,原来的 172.17/16 网段成了 A 的 WAN 口了,A 与 C 得有一个新网段作为 LAN 。 |
2
XiaoxiaoPu 2020-04-11 21:00:18 +08:00
A 和 C 之间是通过什么连接的?路由器?交换机?也许回包是被 A 和 C 之间的设备拦截了。这个回包的发送方是 A,但是源地址并不是 A 在局域网的地址 172.17.82.13 ,有可能会被当成源地址欺骗而被拦截。
|
3
alcarl 2020-04-11 21:17:41 +08:00 via Android
加个 -s 172.17.10.109 限制一下只对这个源地址的包进行 snat 试试
|
4
jimmy2010 OP @V69EX A 是一块网卡,现在 A 和 C 的 IP 是固定的,不能变了,我另外也有一个环境和这个一样,只是其中 A 的角色是一个 openwrt x86,也只配了一个接口,所谓的单臂路由,然后局域网中的另一个 Windows 指向它上网是没问题的。
|
5
jimmy2010 OP @XiaoxiaoPu A 和 C 是同网段的,应该是连在同一个虚拟交换机上。
|
7
xnile 2020-04-11 21:37:58 +08:00
看这 iptables 配置没啥问题,A 上的 iptables 完整规则能贴下么,另外 A 有上启用 lvs 之类的吗
|
8
konia 2020-04-11 21:41:36 +08:00
```
通过 tcpdump 抓包发现,C 的包 A 收到了,A 也把包转发出去了,甚至收到了回包,但是到这里就断了,A 把这个回包吞了,并没有回给 C ``` 抓包显示 A 没有把回包转给 C 吗? 如果没 forward 那确实很诡异. |
9
jimmy2010 OP @xnile
没有其它任何规则,因为我配之前都清空了,只有 nat 表下有下面的规则,也没有启用 lvs 之类: Chain POSTROUTING (policy ACCEPT 49 packets, 3696 bytes) pkts bytes target prot opt in out source destination 15 996 SNAT all -- any eth0 172.17.10.109 anywhere to:172.17.82.13 也有命中,可能确实是虚拟交换机的问题?有可能回包到交换机被丢了,也不好排查,A 和交换机之间也没法抓包。。 |
10
jimmy2010 OP |
11
xnile 2020-04-11 21:51:44 +08:00
@jimmy2010 你在 A 上都开到回报了,怎么可能是交换机的丢的呢,A 都没 forward 出来,确实同楼上说的,有点诡异
|
12
konia 2020-04-11 21:54:19 +08:00
怀疑 A-C 之间也是有 `防火墙某种设定` 的 (看抓包 114 的包已经是从 A 发回去 C 了, 但 C 没有收到), 建议直接搭个 ipip 隧道试试
|
14
jimmy2010 OP @xnile @konia
i.loli.net/2020/04/11/t1BI4NmFsiVY2LM.png 我又自己用 vmware 搭了两个 debian9,完全没有问题,甚至 A 都没有设置 iptables,就开了 ip forward 就行。。应该还是环境的问题,前面环境忘了提一下,是在类似 Openstack 这样的虚拟化平台下,我估计是虚拟交换机,或者虚拟网络底层的某些奇怪设置。 |