【问题标题】:Iptables: forward port from one host to another inside same bridged networkiptables:将端口从一台主机转发到同一桥接网络内的另一台主机
【发布时间】:2014-10-21 14:18:07
【问题描述】:

我有这样的网络:

Internet <===> Modem/Router <--------->  Switch
           1.2.3.4    192.168.1.1/24     |  |  |
                                         |  |  |
                                   +-----+  |  +------+
                                   |        |         |
                                  PC 2      |        PC 3
                          192.168.1.3/24    |       192.168.1.4/24
                                            |
                                           PC 1
                                       192.168.1.2/24
                                           /|\
                                           WLAN
                                          / | \
                                    PC W1 PC W2 PC W3 
                                     192.168.1.X/24 (X>10)

调制解调器/路由器也充当 DHCP 服务器。在公共 IP 1.2.3.4 上发送的任何请求都会重定向到内部网络上的 192.168.1.2。调制解调器/路由器属于 ISP,我无法访问/配置它。 PC 1 是一个 linux 机器:eth0 和 wlan0 被桥接(被奴役到地址为 192.168.1.2 的 br0); hostapd 在 PC 1 上运行,与 PC WX 共享 Internet 连接。我想将连接到 PC 1 上的某些端口的连接重定向到同一网络上的 PC,例如:

1.2.3.4:2222 > 192.168.1.2:2222 -> 192.168.1.3:22
1.2.3.4:3333 > 192.168.1.2:3333 -> 192.168.1.4:25

我尝试使用 iptables 并启用 ip_forward

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -d 192.168.1.2 -p tcp --dport 2222 -j DNAT --to 192.168.1.3:22
iptables -t nat -A POSTROUTING -d 192.168.1.3 -p tcp --dport 22 -j SNAT --to-source 192.168.1.2

对于其他端口等等,但它不起作用。我发现通过 WLAN 连接的任何其他 PC 的重定向工作正常。看来,结合网桥使用iptables PREROUTING规则,一旦数据包从一侧(eth0)进入网桥,它只能流到另一侧(wlan0),但不能出去抛出相同的输入界面。当网桥被禁用时,上述安排工作正常,但我不想将 PC 1 用作路由器,而只用作 AP。

有人可以帮我吗?

【问题讨论】:

    标签: linux networking iptables


    【解决方案1】:

    您建议的规则应稍作调整即可使用。尽管iptables' 手册页中没有记录,但您必须将协议指定为要匹配的第一个参数,如下所示:

    iptables -t nat -A PREROUTING -p tcp -d 192.168.1.2 --dport 2222 -j DNAT --to 192.168.1.3:22
    iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.3 --dport 22 -j SNAT --to-source 192.168.1.2
    

    请注意,第二条规则不是必需的,因为第一条规则会触发 iptables 自动处理响应。

    如果仍然不起作用,请尝试在通过echo 0 &gt; /proc/sys/net/bridge/bridge-nf-call-iptables 遍历网桥时禁用 iptables 调用并重新启动机器。

    【讨论】:

    • 您是否删除了第二条规则?你能详细说明一下到底是什么不起作用吗?是否调用了第一条规则?您是否可以从192.168.1.2 访问192.168.1.3,反之亦然?
    • @PaoloRossi,route -n 的输出是什么?
    • route -n 打印这些行:\n 内核 IP 路由表目标网关 Genmask 标志 Metric Ref Use Iface\n 0.0.0.0 192.168.1.1 0.0.0.0 UG 1 0 0 br0\n 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo\n 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 br0\n
    • @PaoloRossi,您是否从192.168.1.2 ping 到192.168.1.3192.168.1.4,反之亦然?
    • 是的,从 192.168.1.2 我可以 ping 所有有线或无线连接的 PC。
    猜你喜欢
    • 2015-03-11
    • 2016-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    相关资源
    最近更新 更多