Хорошо, в попытке получить ответ, версия TL; DR. Я знаю, что следующая команда:
iptables -A PREROUTING -t nat -i eth0 --dport 80 --source 1.1.1.1 -j REDIRECT --to-port 8080
... перенаправит весь трафик с порта 80 на порт 8080. Проблема в том, что я должен сделать это для каждого порта, который должен быть перенаправлен. Чтобы быть уверенным в будущем, я хочу, чтобы все порты для IP-адреса были перенаправлены на другой (внутренний) IP-адрес, чтобы, если кто-то решит включить SSH, он мог напрямую подключаться, не беспокоясь о iptables.
Что необходимо для надежной пересылки всего трафика с внешнего IP на внутренний IP и наоборот?
Расширенная версия
Я искал Интернет для этого, но у меня никогда не было твердого ответа. У меня есть один физический сервер (HOST) с несколькими виртуальными машинами (ВМ), которым требуется перенаправление трафика на них. Пока достаточно просто заставить его работать на одной машине.
Виртуальные машины работают под VirtualBox и настроены на использование адаптера только для хоста (vboxnet0). Кажется, все работает, но это сильно отстает. И хост (CentOS 5.6), и гостевая (Ubuntu 10.04) машина работают под управлением Linux.
Я сделал следующее:
- Настройте виртуальную машину на наличие статического IP-адреса в сети адаптера vboxnet0.
- Добавьте псевдоним IP к хосту, зарегистрировавшись на выделенном (внешнем) IP.
- Настройте iptables, чтобы разрешить прохождение трафика (через sysctl).
- Настройте iptables для данных DNAT и SNAT с данного IP-адреса на внутренний адрес.
Команды iptables:
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT sudo iptables -A POSTROUTING -t nat -j MASQUERADE iptables -t nat -I PREROUTING -d $OUT_IP -I eth0 -j DNAT --to-destination $IN_IP iptables -t nat -I POSTROUTING -s $IN_IP -o eth0 -j SNAT --to-source $OUT_IP
Сейчас сайт работает, но очень, очень медленно. Я надеюсь, что упустил что-то простое, но пока у меня нет идей.
Некоторая справочная информация: до этого сайт работал с базовой переадресацией портов. Например, порт 80 был сопоставлен с портом 8080 с использованием iptables. В VirtualBox (с сетевым адаптером, настроенным как NAT), переадресация портов наоборот обеспечивала прекрасную работу. Проблема была двоякой: во-первых, необходимо было перенаправить несколько портов (для интерфейсов администратора, https, ssh и т.д.). Во-вторых, разрешено использовать только один IP-адрес для порта 80.
Для решения проблемы используются несколько внешних IP-адресов для разных (под) доменов. Аналогично, сеть "VirtualBox" будет содержать виртуальные машины:
DNS Ext. IP Adapter VM "VirtalBox" IP ------------------------------------------------------------------ a.example.com 1.1.1.1 eth0:1 vm_guest_1 192.168.56.1 b.example.com 2.2.2.2 eth0:2 vm_guest_2 192.168.56.2 c.example.com 3.3.3.3 eth0:3 vm_guest_3 192.168.56.3
И так далее. Проще говоря, цель состоит в том, чтобы направить весь трафик от a.example.com
к vm_guest_1
(иначе говоря, с 1.1.1.1
до 192.168.56.1
). И добиться этого с приемлемой скоростью :).