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

我有以下安装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 A连接到HOST C 我无法configuration我的ISP的路由器。 HOST AHOST B必须能够连接到互联网,所以将默认网关更改为除我的ISP路由器之外的任何东西都不是一种select。 HOST C不得连接到互联网。

我认为至less在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 ,我不知道如何configurationHOST A 有任何想法吗?

经过一些进一步的研究,我find了解决办法 首先,必须configurationHOST 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添加额外的路由,以便他们可以find对方。

HOST A上作为根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 

就这些。 任何相关主机上的潜在防火墙当然必须相应地进行configuration以允许通信。

你被洗了 没有能力configurationHOST A ISP路由器,你不能这样做。

如果/当你可以configurationHOST A,你可以给它一个192.168.50.0/24更具体的(即非默认)路由,并指出在HOST B作为下一跳,然后使用HOST B上的iptables转发到和来自)主机C.这是稍微干净的方式,因为你完全绕过ISP路由器。

如果/当你可以configurationISP ROUTER时,你可以告诉它networking192.168.50.0/24存在(它现在不知道这个),并且到达那里它需要通过HOST B发送stream量(在这种情况下,当ISP路由器收到去往C的stream量时, 应该发送一个ICMPredirect回到主机A.)

所以总而言之,你有一个无法解决的问题, 因为 HOST A和ISP路由器都不知道这个子网。 直到你以这样或那样的方式打破僵局,你是不幸的。

另外,你的iptables语句意味着你只是严格地试图转发数据包给HOST C–如果你打算把更多的设备放在那个子网上,你可能要考虑为整个/ 24子网build立一个转发规则,而不是只有一个主机。