有没有大佬能帮忙看看这个 Linux IP 转发和 iptables 的难题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jimmy2010
V2EX    问与答

有没有大佬能帮忙看看这个 Linux IP 转发和 iptables 的难题

  •  
  •   jimmy2010 2020-04-11 20:38:09 +08:00 2103 次点击
    这是一个创建于 2007 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我有两个 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 条附言    2023-04-13 08:33:30 +08:00
    今天偶然来看以前发的贴子,发现这个问题没有下文了,其实后面找到原因了,是虚拟化平台上的一个安全设置,叫做 ip 防欺诈,关掉中转虚拟机的 ip 防欺诈就好了。
    15 条回复    2020-04-12 09:57:22 +08:00
    V69EX
        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 。
    XiaoxiaoPu
        2
    XiaoxiaoPu  
       2020-04-11 21:00:18 +08:00
    A 和 C 之间是通过什么连接的?路由器?交换机?也许回包是被 A 和 C 之间的设备拦截了。这个回包的发送方是 A,但是源地址并不是 A 在局域网的地址 172.17.82.13 ,有可能会被当成源地址欺骗而被拦截。
    alcarl
        3
    alcarl  
       2020-04-11 21:17:41 +08:00 via Android
    加个 -s 172.17.10.109 限制一下只对这个源地址的包进行 snat 试试
    jimmy2010
        4
    jimmy2010  
    OP
       2020-04-11 21:18:38 +08:00 via Android
    @V69EX A 是一块网卡,现在 A 和 C 的 IP 是固定的,不能变了,我另外也有一个环境和这个一样,只是其中 A 的角色是一个 openwrt x86,也只配了一个接口,所谓的单臂路由,然后局域网中的另一个 Windows 指向它上网是没问题的。
    jimmy2010
        5
    jimmy2010  
    OP
       2020-04-11 21:19:47 +08:00 via Android
    @XiaoxiaoPu A 和 C 是同网段的,应该是连在同一个虚拟交换机上。
    jimmy2010
        6
    jimmy2010  
    OP
       2020-04-11 21:20:04 +08:00 via Android
    @alcarl 也试过了,还是一样的结果。
    xnile
        7
    xnile  
       2020-04-11 21:37:58 +08:00
    看这 iptables 配置没啥问题,A 上的 iptables 完整规则能贴下么,另外 A 有上启用 lvs 之类的吗
    konia
        8
    konia  
       2020-04-11 21:41:36 +08:00
    ```
    通过 tcpdump 抓包发现,C 的包 A 收到了,A 也把包转发出去了,甚至收到了回包,但是到这里就断了,A 把这个回包吞了,并没有回给 C
    ```

    抓包显示 A 没有把回包转给 C 吗? 如果没 forward 那确实很诡异.
    jimmy2010
        9
    jimmy2010  
    OP
       2020-04-11 21:45:36 +08:00
    @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 和交换机之间也没法抓包。。
    jimmy2010
        10
    jimmy2010  
    OP
       2020-04-11 21:49:05 +08:00
    @konia
    i.loli.net/2020/04/11/EkXqSnC28zYhufw.png
    A 收到了,转给 C 出了问题,现在就是不好排查是哪里的问题。
    xnile
        11
    xnile  
       2020-04-11 21:51:44 +08:00
    @jimmy2010 你在 A 上都开到回报了,怎么可能是交换机的丢的呢,A 都没 forward 出来,确实同楼上说的,有点诡异
    konia
        12
    konia  
       2020-04-11 21:54:19 +08:00
    怀疑 A-C 之间也是有 `防火墙某种设定` 的 (看抓包 114 的包已经是从 A 发回去 C 了, 但 C 没有收到), 建议直接搭个 ipip 隧道试试
    xnile
        13
    xnile  
       2020-04-11 21:57:42 +08:00
    @jimmy2010 看样像没 snat 啊,tcpdump 跟上-vv 再贴张图出来看下
    jimmy2010
        14
    jimmy2010  
    OP
       2020-04-11 22:11:34 +08:00
    @xnile @konia
    i.loli.net/2020/04/11/t1BI4NmFsiVY2LM.png
    我又自己用 vmware 搭了两个 debian9,完全没有问题,甚至 A 都没有设置 iptables,就开了 ip forward 就行。。应该还是环境的问题,前面环境忘了提一下,是在类似 Openstack 这样的虚拟化平台下,我估计是虚拟交换机,或者虚拟网络底层的某些奇怪设置。
    halfcrazy
        15
    halfcrazy  
       2020-04-12 09:57:22 +08:00
    @jimmy2010 openstack 的话,可以试试禁用 port security
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     852 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 21:30 PVG 05:30 LAX 14:30 JFK 17:30
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86