Я пытаюсь установить среду виртуализации докера. Это - развитие этого вопроса.
У меня есть виртуальный интерфейс eth0:0, и я хотел бы передать его с помощью iptables.
Общедоступный, основной IP 93.93.93.93
IP обработки отказа 5.6.7.8
У меня есть сервер, где искажение IP настроено:
/etc/network/interfaces
# 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, который создает интерфейс, который 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