我正在尝试build立一个docker虚拟化环境。 这是这个问题的后续。
我有一个虚拟eth0:0接口,我想转发它使用iptables。
公众,主要知识产权为93.93.93.93
故障转移IP是5.6.7.8
我有一个服务器的IP别名configuration:
的/ etc /networking/接口
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 93.93.93.93 netmask 255.255.255.0 network 93.93.93.0 broadcast 93.93.93.255 gateway 93.93.93.254 # IPFO 1 post-up /sbin/ifconfig eth0:0 5.6.7.8 netmask 255.255.255.255 broadcast 5.6.7.8 pre-down /sbin/ifconfig eth0:0 down
这样,当我从外面ping eth0:0时,它就起作用了。 这似乎是问题从路由开始也许?
root@aldebaran:~# ip route default via 93.93.93.254 dev eth0 93.93.93.0/24 dev eth0 proto kernel scope link src 94.23.55.226 172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.42.1
没有eth0.0的标志
然后我添加iptables规则:
iptables -A PREROUTING -t nat -i eth0:0 -p tcp --dport 80 -j DNAT --to 172.17.0.2:80 iptables -A FORWARD -p tcp -d 172.17.0.2 --dport 80 -j ACCEPT
然后我尝试
root@aldebaran:~# curl 172.17.0.2:80 WORKS! root@aldebaran:~# curl IP_FAILOVER curl: (7) Failed to connect to IP_FAILOVER port 80: Connection refused
根据本教程,我没有正确设置路由。 这是正确的吗? 我该如何解决?
问题是我使用IP别名,这创build了一个Iptables无法使用的接口。 Eth0:0不是有效的目标。 我应该使用:
iptables -t nat -I PREROUTING --dst 5.6.7.8 -p tcp --dport 80 -j DNAT --to 172.17.0.2:80 iptables -A FORWARD -p tcp -d 172.17.0.2 --dport 22 -j ACCEPT iptables -t nat -A POSTROUTING -s 172.17.0.2 -j MASQUERADE