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

如何在默认转发伪装策略之前加一个不伪装的策略?

  •  
  •   phpfpm · 2022-06-01 08:20:49 +08:00 · 1325 次点击
    这是一个创建于 935 天前的主题,其中的信息可能已经有所发展或是发生改变。

    网络拓扑:

    1. 主路由 192.168.10.1
    2. 旁路由 192.168.10.2 ,static ,默认网关是 192.168.10.1
    3. DHCP:主路由下发,下发的网关和 DNS 都指向旁路由
    4. 旁路由设置以下转发规则:
    • iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
    1. 内网机器 192.168.10.120
    2. 端口转发:8888:主路由公网出口 ==> 192.168.10.120:80

    遇到的问题

    流量从公网进来,从 192.168.10.1 打到 192.168.10.120 之后,回包是回给公网的,此时回包的数据包回给 192.168.10.2 ,而不是直接给主路由

    192.168.10.2 收到其他机器给外网的数据包之后,开始伪装,把 sip 改为自己的 ip ,也就是 NAT 伪装

    此时 192.168.10.1 蒙圈了:

    1. 入站 visitor:12345 => publicip:8888
    2. 转发 visitor:12345 => 10.120:80
    3. 回包 10.2:80 => visitor:12345 (这个包的 SRC 存疑,不确定回包的端口号是不是 80 )
    4. 然后发现转发的地址和回包的地址不对,路由器 drop 这个流量,外网收不到回包

    可能的解决方案

    在默认的伪装策略之前加一条,当来源 ip 是 10.120 且来源端口是 80 的时候,直接接受而不是伪装:

    iptables -t nat -I POSTROUTING -o eth0 -p tcp -s 192.168.10.120 --source-port 80 -j ACCEPT
    iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
    

    但是似乎不生效,求解

    看了一下 OP 的 iptables ,发现这个策略没有收到包和流量,看起来是没有命中?

    9 条回复    2022-06-01 15:28:16 +08:00
    zhangsanfeng2012
        1
    zhangsanfeng2012  
       2022-06-01 09:46:36 +08:00
    旁路由的 nat 没有必要,取消就行了
    phpfpm
        2
    phpfpm  
    OP
       2022-06-01 10:24:52 +08:00
    @zhangsanfeng2012 这个不是 NAT ,就是一个转发,不加这个 masquade 就都没法用
    bfdh
        3
    bfdh  
       2022-06-01 11:07:52 +08:00
    我也觉得旁路由做 MASQUERADE 有点奇怪,按你这个拓扑,旁路由挂了,整个网络也就挂了,那何不直接把旁路由做主路由?
    phpfpm
        4
    phpfpm  
    OP
       2022-06-01 11:39:15 +08:00
    @bfdh 哈哈哈哈好问题

    这么搞可以是主路由可以是傻瓜无线路由器什么的
    而且比如迅游主机加速器就是这么搞的去洗流量啊

    anyway 回到这个问题本身。。。求点解我该怎么写 iptables
    bfdh
        5
    bfdh  
       2022-06-01 11:57:35 +08:00
    要不换个思路,试试多转一遍,不管 iptables 了? visitor:12345 => publicip:8888 => 10.2:8888 => 10.120:80
    phpfpm
        6
    phpfpm  
    OP
       2022-06-01 13:10:22 +08:00 via Android
    @bfdh 是我这么搞过 没问题的 但是就是要经过两次转发配置起来很别扭。。。
    zhangsanfeng2012
        7
    zhangsanfeng2012  
       2022-06-01 14:00:08 +08:00
    @phpfpm MASQUERADE 就是 snat ,去掉 nat ,同子网内走二层转发就没问题了
    phpfpm
        8
    phpfpm  
    OP
       2022-06-01 15:15:48 +08:00
    @zhangsanfeng2012 但是去掉 nat 之后,就不转发流量了怎么办,使用 10.2 当做网关的机器无法访问外网

    求解二层转发的规则怎么写?
    zhangsanfeng2012
        9
    zhangsanfeng2012  
       2022-06-01 15:28:16 +08:00
    @phpfpm pc 的默认网关是旁路由,旁路由的默认网关是主路由: pc->旁路由->主路由->nat 出公网,这个路径是通的。不知道你的旁路由是什么系统,防火墙是不是关闭了,ip forward 是不是打开了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   922 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 19:46 · PVG 03:46 · LAX 11:46 · JFK 14:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.