连接到另一台机器后面的机器

连接到另一台机器后面的机器

我有以下设置 LAN 设置(所有机器都运行 Slackware 14.2):

                  INTERNET
                      |
                      | 192.168.10.1
                 +----------+
                 |ISP ROUTER|
                 +----------+
                   |      |
              +----+      +-----+
192.168.10.10 | (eth0)          | 192.168.10.20 (eth0)
         +--------+         +--------+
         | HOST A |         | HOST B |
         +--------+         +--------+
                                | 192.168.50.50 (eth1)
                                |
                                | 192.168.50.100 (eth0)
                            +--------+
                            | HOST C |
                            +--------+

HOST AHOST B通过我的 ISP 路由器连接,并可以互相连接。HOST C仅连接到HOST B并能够与 通信HOST B。但是,我希望能够HOST C从连接到HOST A。我无法配置我的 ISP 路由器。HOST A并且HOST B必须能够连接到 Internet,因此将默认网关更改为除我的 ISP 路由器之外的其他任何网关都是不可能的。 不允许HOST C与 Internet 建立任何连接。

我认为至少HOST B我必须应用这些iptables规则:

iptables -A FORWARD -s 192.168.50.100 -d 192.168.10.0/24 -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -d 192.168.50.100 -s 192.168.10.0/24 -i eth0 -o eth1 -j ACCEPT

iptables -t nat -A POSTROUTING -s 192.168.50.100 -d 192.168.10.0/24 -o eth0 -j MASQUERADE

但是,我不确定这些规则是否足够,HOST B而且我不知道如何配置HOST A。有什么想法吗?

答案1

经过进一步的研究,我找到了解决方案。首先,HOST B必须配置为转发来自和到的数据包HOST C

iptables -A FORWARD -s 192.168.50.100 -d 192.168.10.0/24 -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -d 192.168.50.100 -s 192.168.10.0/24 -i eth0 -o eth1 -j ACCEPT

iptables -t nat -A POSTROUTING -s 192.168.50.100 -d 192.168.10.0/24 -o eth0 -j MASQUERADE

然后HOST A HOST C需要通过 添加额外的路线HOST B,以便他们能够互相找到对方。

以 root 身份处理HOST A问题:

route add -host 192.168.50.100 gw 192.168.10.20

以 root 身份处理HOST C问题:

route add -host 192.168.10.10 gw 192.168.50.50

就是这样。当然,任何相关主机上的潜在防火墙都必须进行相应配置以允许流量通过。

答案2

你被骗了。没有能力配置主机A或者ISP 路由器,你不能这样做。

如果/当您可以配置主机 A 时,您可以为其提供更具体的(即非默认)192.168.50.0/24 路由​​,并将其指向主机 B 作为下一跳,然后使用主机 B 上的 iptables 转发到(和从)主机 C。这是稍微干净的方法,因为您可以完全绕过 ISP 路由器。

如果/当你可以配置 ISP 路由器时,你可以告诉它网络 192.168.50.0/24 存在(它现在还不知道这一点),并且要到达那里,它需要通过主机 B 发送流量。(另外:在这种情况下,ISP 路由器应该发送ICMP 重定向当主机 A 收到发往 C 的流量时,返回到主机 A。)

总而言之,你有一个无法解决的问题两者都不主机 A 和 ISP 路由器都不知道这个其他子网。除非你以某种方式打破这种僵局,否则你很倒霉。

此外,您的 iptables 语句暗示您严格尝试仅为主机 C 转发数据包 - 如果您计划在该子网上放置更多设备,您可能需要考虑为整个 /24 子网而不是仅仅那一个主机构建转发规则。

相关内容