4

Хорошо, в попытке получить ответ, версия 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.

Я сделал следующее:

  1. Настройте виртуальную машину на наличие статического IP-адреса в сети адаптера vboxnet0.
  2. Добавьте псевдоним IP к хосту, зарегистрировавшись на выделенном (внешнем) IP.
  3. Настройте iptables, чтобы разрешить прохождение трафика (через sysctl).
  4. Настройте 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). И добиться этого с приемлемой скоростью :).

1 ответ1

2

Поскольку вы уже распределяете публичные адреса для своих виртуальных машин, возможно, вам следует рассмотреть мостовую сеть вместо NAT? Вы получили бы намного более чистую установку.

Если вы беспокоитесь о том, что ваши гости могут вмешиваться друг в друга в режиме моста, вы все равно можете использовать ebtables и / или static arp для усиления безопасности.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .