NAT forwarding (весь IP) работает только на некоторых портах
Так как мой хостер не позволяет использовать briged-настройки, мне пришлось искать решение NAT для запуска моей виртуальной машины CentOS на дополнительном IP-адресе и хост-машины на основном IP-адресе.
Теперь у меня проблема, поскольку для портов 22, 80 и 443 это работает, как и ожидалось. Я достиг своего SSH/Apache под CentOS. Но я также запускаю экземпляр DB2 на порту 50000, и я не могу с ним связаться. Соединение отказано каждый раз.
Однако я могу получить доступ к порту с хост-компьютера по внутреннему IP-адресу 192.168.56.2, поэтому нет брандмауэра, блокирующего мой запрос в гостевой системе.
Это настройка:
Хост-машина Ubuntu 12.04:
ifconfig -a
eth0 Link encap:Ethernet HWaddr censored
inet addr:85.25.PRIMARY.IP Bcast:85.25.NETWORK.SEGMENT Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
eth0:1 Link encap:Ethernet HWaddr censored
inet addr:85.25.SECONDARY.IP Bcast:0.0.0.0 Mask:255.255.255.255
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
vboxnet0 Link encap:Ethernet HWaddr 0a:00:27:00:00:00
inet addr:192.168.56.1 Bcast:192.168.56.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A PREROUTING -d 85.25.SECONDARY.IP/32 -i eth0 -j DNAT --to-destination 192.168.56.2
-A PREROUTING -d 85.25.SECONDARY.IP/32 -i eth0 -j DNAT --to-destination 192.168.56.2
-A POSTROUTING -s 192.168.56.2/32 -o eth0 -j SNAT --to-source 85.25.SECONDARY.IP
-A POSTROUTING -s 192.168.56.2/32 -o eth0 -j SNAT --to-source 85.25.SECONDARY.IP
На гостевой машине (CentOS 6.6):
ifconfig -a
eth0 Link encap:Ethernet HWaddr 08:00:27:D6:D5:4B
inet addr:192.168.56.2 Bcast:192.168.56.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
eth0:1 Link encap:Ethernet HWaddr 08:00:27:D6:D5:4B
inet addr:85.25.SECONDARY.IP Bcast:85.25.SECONDARY.IP Mask:255.255.255.255
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
iptables -t nat -S
-P PREROUTING ACCEPT
-P POSTROUTING ACCEPT
-P OUTPUT ACCEPT
Есть идеи?
// edit: IP-переадресация включена конечно (net.ipv4.ip_forward=1
)
1 ответ
Решаемые. Это не имело ничего общего с моей (правильной) конфигурацией, но с прокси, который я использую для подключения к нестандартным портам. Оказывается, если вы уже находитесь в системе (через прокси-сервер), вам нужно открыть соединение напрямую с виртуальным ip, потому что правила предварительной маршрутизации не применяются, и ваш запрос не будет перенаправлен автоматически.