Мы хотим перенаправить весь HTTP-трафик на другой IP-адрес на стандартной Linux-машине Amazon EC2 (на базе CentOS). Я знаю, как это сделать с помощью правил прокси и apache, но я предполагал, что iptables будет гораздо более быстрым решением (возможно, нет!)
Команды
sudo iptables -P INPUT ACCEPT sudo iptables -F sudo iptables -A PREROUTING -t nat -p tcp -i eth0 --dport 80 -j DNAT --to 208.68.208.81:80 sudo iptables -A FORWARD -p tcp -d 208.68.208.81 --dport 80 -j ACCEPT
iptables -t нат -L -v -n
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 DNAT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 to:208.68.208.81:80 Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 11 packets, 820 bytes) pkts bytes target prot opt in out source destination Chain POSTROUTING (policy ACCEPT 11 packets, 820 bytes) pkts bytes target prot opt in out source destination
iptables -L -v -n
Chain INPUT (policy ACCEPT 202 packets, 15705 bytes) pkts bytes target prot opt in out source destination Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT tcp -- * * 0.0.0.0/0 208.68.208.81 tcp dpt:80 Chain OUTPUT (policy ACCEPT 145 packets, 13747 bytes) pkts bytes target prot opt in out source destination
http://208.68.208.81 в веб-браузер работает, но когда я пытаюсь ввести IP-адрес машины EC2 с этой конфигурацией, я получаю тайм-аут. Я вижу некоторые пакеты с watch -d iptables -t nat -L -v -n
Помогите!
Обновление: добавлено -i eth0
к правилу PREROUTING
Я вижу три потенциальных проблемы (в отличие от другого ответа, я не вижу ничего, что могло бы вызвать «петлю» даже в неотредактированной версии вашего вопроса).
Вы можете обойти точки 2 и 3, используя правило SNAT или MASQURADE в дополнение к DNAT, но если вы это сделаете, вы потеряете исходный IP-адрес источника трафика. Это очень затруднит контроль над злоупотреблениями.
Другое решение пунктов 2 и 3 - это установка VPN между двумя серверами. Затем используйте DNAT для пересылки трафика через VPN и маршрутизацию на основе IP-адреса источника, чтобы вернуть ответы обратно в NAT.
Вы создали петлю. Убедитесь, что вы добавили интерфейс в PREROUTING
правило (например, -i eth1
или что-то еще).
Вам также может понадобиться такое правило:
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
45M 3723M MASQUERADE all -- * WAN_IF 0.0.0.0/0 0.0.0.0/0
В противном случае пакеты будут идти прямо с машины, на которую они были отправлены, обратно клиенту, я думаю, который не будет ожидать их от этого хоста.
Вы можете использовать rinetd, чтобы просто перенаправить свой IP-трафик.