V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
jimmy2010
V2EX  ›  问与答

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

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

    我有两个 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   ·   实用小工具   ·   967 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 20:49 · PVG 04:49 · LAX 12:49 · JFK 15:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.