Перенаправлять трафик TCP с преобразованием портов и сохранять входящий общедоступный IP-адрес

У меня два сервера. Windows имеет 1 NIC, Ubuntu - 2 NIC:

Server   NIC  Service  Listening Ports
-------  ---  -------  ---------------
Windows   1   IIS      80, 443
              mySvc    300            <--------------------------------\
Ubuntu    1   nginx    80,443                                          |
          2            80,443,300     forward w/ port translation to --/

Моим пользователям необходимо подключиться к порту Windows 300 для запуска моего приложения. Многие компании разрешают исходящий трафик только на порты 80 и 443, поэтому некоторые пользователи не могут подключиться через какой-либо другой порт. Я не могу настроить mySvc для прослушивания порта 80 или 443, если я не разверну другой сервер Windows, чего я не хочу делать.

При добавлении NIC2 к серверу Ubuntu настройте DNS так, чтобы он указывал на NIC2. и перенаправлять порты 80, 443 и 300 на порт Windows 300. Теперь все пользователи могут подключаться через любой брандмауэр компании.

Проблема : Windows видит входящий IP-адрес перенаправленного трафика как IP-адрес Ubuntu NIC1 вместо IP-адреса пользователя.

Вопрос : Как я могу изменить мои файлы конфигурации, чтобы передать пользователю ' s IP-адрес в переадресации / преобразовании портов, чтобы Windows видела общедоступный IP-адрес пользователя?

Моя конфигурация : (IP-адреса изменены для обеспечения конфиденциальности)

Server   NIC  Public IP  Private IP      Interface               Listening Ports
-------  ---  ---------  --------------  ----------------------  ---------------
Windows   1   1.2.3.4    192.168.23.112   Local Area Connection  80,443,300
Ubuntu    1   1.2.4.5    192.168.24.112   eth0                   80,443
Ubuntu    2   1.2.5.6    192.168.20.164   eth0:0                 80,443,300

На сервере Ubuntu:

$less /etc/network/interfaces.d/eth0.cfg

auto eth0 eth0:0
allow-hotplug eth0 eth0:0
iface eth0 inet dhcp
netmask 255.255.240.0
gateway 192.168.16.1

Когда мы назначаем IP-адрес eth0: 0 в приведенном выше eth0.cfg , серверу требуется несколько минут для загрузки, а переадресация портов не работает. Таким образом, только eth0 отображается так, как настроено в ifconfig :

$ifconfig

eth0      Link encap:Ethernet  HWaddr **:**:**:**:**:**
          inet addr:192.168.24.112  Bcast:192.168.31.255  Mask:255.255.240.0

Переадресация портов выполняется с использованием сценария boot-cron bash:

$less /etc/init.d/ipforwarding

#!/bin/bash
iptables -t nat -A PREROUTING -i eth0 -p tcp -d 192.168.20.164 --dport 300 -j DNAT --to-destination 192.168.23.112:300
iptables -t nat -A PREROUTING -i eth0 -p tcp -d 192.168.20.164 --dport 443 -j DNAT --to-destination 192.168.23.112:300
iptables -t nat -A PREROUTING -i eth0 -p tcp -d 192.168.20.164 --dport 80 -j DNAT --to-destination 192.168.23.112:300
iptables -t nat -A POSTROUTING -j MASQUERADE
#iptables -t nat -A POSTROUTING -p tcp --dport 300 -j SNAT --to-source 192.168.20.164

Когда перенаправленный трафик прибывает на порт 300 из В окне Windows входящий IP-адрес - 192.168.24.112 , что является Ubuntu NIC1, хотя DNS указывает пользователям на Ubuntu NIC2. Если я добавлю # в строку MASQUERADE и удалю # из следующей строки, тогда трафик, поступающий на сервер Windows, будет иметь IP-адрес 192.168.20.164 . Таким образом, разница между MASQUERADE и SNAT имеет смысл. Но оба из них изменяют IP-адрес во время операции NAT .

Я хочу, чтобы общедоступный IP-адрес пользователя перенаправлялся на порт 300 Windows всякий раз, когда трафик достигает Ubuntu NIC2 на портах 80, 443 или 300. . Любой совет был бы полезен!

0
задан 28 May 2018 в 01:11
1 ответ

Чтобы использовать SNAT, вам нужно сделать сервер Linux маршрутизатором по умолчанию для сервера Windows. Это не рекомендуемое решение.

Распространенным решением этой проблемы является проксирование трафика на сервере Linux. Попросите прокси добавить заголовок с внешним IP-адресом или положитесь на заголовок X-Forwarded-For. Это потребует, чтобы программное обеспечение в Windows обработало этот заголовок с внешним IP-адресом. Многие приложения, которые обычно проксируются, имеют настройку, делающую это автоматически, возможно, с определенным заголовком приложения.

1
ответ дан 4 December 2019 в 15:57

Теги

Похожие вопросы