Сейчас я настраиваю свой сервер. я использую proxmox
который похож на vmware
. Важно знать, что у меня только 1 внешний IP-адрес. На моем сервере я перенаправляю порт 80 и 443 на виртуальный хост apache
используя эту команду:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 10.0.43.113
iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to 10.0.43.113
Моя сеть также связана с:
iptables -t nat -D POSTROUTING -s '10.0.43.0/24' -o eth0 -j MASQUERADE
Теперь проблема в том, что если я перенаправляю порт 80 и 443 таким образом, apt-get выдает ошибку 404, когда я использую его с виртуальной машины (за моими воротами).
Как я могу перенаправить порт на мою виртуальную машину, если все еще работает apt-get? Что я делаю не так ?
Спасибо,
Можете ли вы проверить (с помощью tcpdump), что происходит на веб-сервере? Я предполагаю, что такое правило отсутствует (при условии, что eth1 - ваш внутренний интерфейс):
iptables -t nat -A PREROUTING -i eth1 -o eth1 -j SNAT --to $INTERNAL_GATEWAY_IP
Без этого клиент пытается подключиться к 1.2.3.4, шлюз отклоняет пакет на 10.0.43.113, веб-сервер видит соединение от клиента (например, 10.0.43.112), таким образом, отправляет свой ответ на 10.0.43.112, а клиент отправляет на 1.2.3.4 и получение ответа от 10.0.43.113 просто идет «WTF?» ... Но с SNAT веб-сервер отвечает шлюзу, шлюз перезаписывает и исходный, и целевой адрес, и все счастливы.
Вы перенаправляете ВСЕ пакеты на порт 80 и 443 гостю, включая его собственные пакеты. Добавить
-i eth0
условие к вашим правилам DNAT.