我有以下安装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 A和HOST B通过我的ISP的路由器连接,可以相互连接。 HOST C仅连接到HOST B并能够与HOST B通话。 但是,我想能够从HOST A连接到HOST C 我无法configuration我的ISP的路由器。 HOST A和HOST 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立一个转发规则,而不是只有一个主机。