我有一个包含多个节点的小集群。只有一个节点(我们称之为根),可以连接到互联网。所有节点都已连接,因此我们可以从一个节点 ping 到另一个节点,但我们无法从公共节点(即非根节点)访问互联网。
根节点ifconfig
输出:
eth0 Link encap:Ethernet HWaddr b8:27:eb:d8:53:25
inet addr:192.168.10.10 Bcast:192.168.10.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4084 errors:0 dropped:1295 overruns:0 frame:0
TX packets:841 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:249141 (243.3 KiB) TX bytes:87110 (85.0 KiB)
eth1 Link encap:Ethernet HWaddr b8:8d:12:54:75:aa
inet addr:158.184.27.129 Bcast:158.184.27.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1647 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:229772 (224.3 KiB) TX bytes:68634 (67.0 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:4 errors:0 dropped:0 overruns:0 frame:0
TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:260 (260.0 B) TX bytes:260 (260.0 B)
wlan0 Link encap:Ethernet HWaddr 00:0f:13:39:02:c3
inet addr:158.196.122.94 Bcast:158.196.123.255 Mask:255.255.252.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:127 errors:0 dropped:0 overruns:0 frame:0
TX packets:75 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:37269 (36.3 KiB) TX bytes:27150 (26.5 KiB)
根节点route -n
输出
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 158.184.27.1 0.0.0.0 UG 0 0 0 eth1
158.184.27.0 * 255.255.255.0 U 0 0 0 eth1
192.168.10.0 * 255.255.255.0 U 0 0 0 eth0
公共节点ifconfig
输出:
eth0 Link encap:Ethernet HWaddr b8:27:eb:b3:ed:0e
inet addr:192.168.10.11 Bcast:192.168.10.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:5078 errors:0 dropped:2249 overruns:0 frame:0
TX packets:1502 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:287740 (280.9 KiB) TX bytes:179477 (175.2 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:36 errors:0 dropped:0 overruns:0 frame:0
TX packets:36 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:3590 (3.5 KiB) TX bytes:3590 (3.5 KiB)
公共节点route -n
输出:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.10.10 0.0.0.0 UG 0 0 0 eth0
192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
您知道如何从普通节点通过根节点连接到互联网吗?我对网络的了解很少,所以请尝试详细解释一下。
编辑:
考虑到 Richard Neumann 的回答,我在根节点上启用了 IP 转发。我认为根节点已设置为默认网关(请参阅公共节点route -n
输出)。
但互联网仍然无法工作......
编辑2:
> traceroute 8.8.8.8
1 permonik0 (192.168.10.10) 0.972ms 0.957ms 0.922ms
2 * * *
...
30 * * *
编辑3:
我根据设置NAT本文现在我什至可以成功 ping 8.8.8.8。但我仍然无法 ping 通任何网站,看来现在还存在一些 DNS 问题。
答案1
如果 @Richard Neumann 的答案不起作用,则有可能是 DNS 问题。
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
设置 IP 转发和伪装。
iptables -P FORWARD ACCEPT
iptables --table nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables --table nat --append POSTROUTING --jump MASQUERADE --source 192.168.10.10/24
iptables-save > /root/clients.fw
echo "/sbin/iptables-restore < /root/clients.fw" >> /etc/rc.local
上述命令将启用 IP 转发,并设置防火墙iptables
,允许您从客户端访问互联网。
答案2
你的根节点将不得不充当路由器对于其他节点。
您需要在 IPv4 的情况下启用 IP 转发路由器:
sysctl -w net.ipv4.ip_forward = 1
要使其持久,请编辑/etc/sysctl.conf
和设置:
net.ipv4.ip_forward=1
您可能还想做路由器对方的默认网关节点。
如果下一跳超出你的路由器不知道网络 192.168.10.10/24,那么你需要实施网络地址解读(网络地址转换)。
看看iptables
它的MASQUERADE
选项。
对于可能的 DNS 问题,请参阅@Hunter.S.Thompson 的回答。