Назад | Перейти на главную страницу

Перенаправить весь входящий трафик со вторичного общедоступного IP-адреса на внутренний IP-адрес с помощью iptables

В настоящее время я пытаюсь понять, как я могу перенаправить трафик со вторичного общедоступного IP-адреса моего выделенного сервера на внутренний IP-адрес моей сети с помощью iptables, чтобы, например, веб-серверы и тому подобное, видимые снаружи.

Моя установка - это выделенный сервер, содержащий три виртуальные машины, которые образуют «частную локальную сеть». Между ними устанавливается соединение, и виртуальные машины могут подключаться к Интернету через мост между изолированной локальной сетью и физическим сервером. Разрешение исходящий трафик устанавливается с использованием следующего правила (LAN: 192.168.x.x, пример публичного адреса: 8.8.8.8):

iptables -t nat -A POSTROUTING -s 192.168.1.101 -j SNAT --to-source 8.8.8.8

Это отлично работает - если я открою интернет-браузер и перейду на whatismyip.com, он больше не будет отображать основной IP-адрес сервера, а вместо этого будет показывать вторичный IP-адрес в том виде, в каком он должен.

Однако теперь я бы хотел сделать наоборот и установить, например, веб-сервер на одной из виртуальных машин и сделать его общедоступным через мой вторичный IP-адрес. Я искал ответ и обнаружил, что должен добавить правило PREROUTING для этого, поэтому я попробовал следующее:

iptables -t nat -A PREROUTING -d 8.8.8.8 -j DNAT --to-destination 192.168.1.101

Однако подключение к порту 80 общедоступного IP-адреса истечет. Кажется, что я все еще что-то упускаю или в том, как я выполняю правила, есть ошибка.

Пожалуйста, обратите внимание: Вместо того, чтобы открывать только конкретный порт, я бы хотел перенаправить весь входящий трафик с этого конкретного IP-адреса на виртуальную машину и обрабатывать там безопасность.

Любой совет будет оценен - ​​возможно, я просто упускаю что-то незначительное.

Вам понадобится комбинация DNAT и SNAT, а также активный ip_forwarding.

Сначала проверьте ip_forwarding:

cat /proc/sys/net/ipv4/ip_forward

Если он равен 1 (включен), продолжайте. Если нет, вам нужно будет поставить net.ipv4.ip_forward=1 на /etc/sysctl.conf и беги sysctl -p.

Первое правило - DNAT (допустим, 8.8.8.8 как внешний IP и 192.168.0.10 как внутренний):

iptables -t nat -A  PREROUTING -d 8.8.8.8 -j DNAT --to-destination 192.168.0.10

Когда внешняя система (например, 200.100.50.25) отправляет пакет, достигающий 8.8.8.8, будет иметь DESTINATION изменился на 192.168.0.10, и отослал. Но источник будет 200.100.50.25, пакет будет обработан и ответный пакет сможет:

  1. Быть сброшенным 192.168.0.10, который может не знать, как его маршрутизировать. Не желательно.

  2. Отправлять через 192.168.0.10 на шлюз по умолчанию и в Интернет. Как только он достигнет 200.100.50.25, эта система никогда не слышала 192.168.0.10 и сбросит пакет. Не хорошо.

  3. Быть сброшенным с первого прыжка, как 192.168.0.10 является частным адресом и не маршрутизируется в Интернете.

Чтобы решить эту проблему, вам нужно второе правило, SNAT:

iptables -t nat -A POSTROUTING -s 192.168.0.10 -j SNAT --to-source 8.8.8.8

Согласно этому правилу каждый пакет, который приходит от 192.168.0.10 будет ли источник изменен на 8.8.8.8 и отослал.

Побочный эффект заключается в том, что каждый вход в систему 192.168.0.10 покажет 8.8.8.8 как клиент, а не как настоящий клиент. Отследить нарушителей будет немного сложнее.