У меня есть веб-служба, работающая на порту X. Она никогда не предназначалась для работы за пределами локальной сети, но я хотел бы получить к ней доступ через Интернет. Поэтому мне нужно изменить исходный IP-адрес всех входящих пакетов на локальный (например, 192.168.2.100). В противном случае веб-служба ответит ошибкой.
Итак, вот что мне нужно:
Если я отправлю пакет со своего домашнего компьютера с общедоступным IP-адресом X на общедоступный IP-адрес Y моего сервера, исходный IP-адрес (в данном случае X) необходимо изменить на локальный (например, 192.168.2.1). . После этого пакет должен быть передан веб-приложению, работающему на том же сервере через порт 80.
Хорошо, теперь я думаю, что понимаю, чего вы хотите. Это особый случай, отличный от обычного. Перенаправление порта подход, который я опубликовал ранее (см. ниже). Следующие правила должны сделать это.
Я предполагаю следующее:
<x>
: публичный IP-адрес сервера<y>
: публичный IP клиента<a>
: внутренний IP-адрес сервера (192.168.2.1
)<b>
: внутренний "поддельный" IP клиента (192.168.2.100
)<if>
: внешний интерфейс (т.е. eth0
)Только SNAT
Это правило изменит адрес источника пакета:
iptables -t nat -A INPUT -p tcp -d <x> --dport 80 -s <y> -j SNAT --to-source <b>
Комбинированный DNAT и SNAT:
Эти правила изменят адрес источника и получателя пакета:
iptables -t nat -A PREROUTING -i <if> -p tcp -d <x> --dport 80 -s <y> \
-j DNAT --to-destination <a>:80
iptables -t nat -A INPUT -p tcp -d <a> -s <y> --dport 80 \
-j SNAT --to-source <b>
Не забывай ПРИНЯТЬ пакеты в таблице фильтров.
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8080 \
-j DNAT --to-destination 192.168.2.1:80
Это перенаправит порт 8080
на входящих пакетах на внешнем интерфейсе (в этом примере eth0
) на внутренний хост 192.168.2.1
портировать 80
. Заменить интерфейс, протокол, порт и к месту назначения с вашими настройками.
Это правило примет измененный пакет:
iptables -A FORWARD -i eth0 -p tcp -d 192.168.2.1 --dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport *$srcPortNumber* -j REDIRECT --to-port *$dstPortNumber*
Вы измените -i attribut, если ваша сетевая карта не на eth0
Редактировать # 1
Вы можете для --dport и --to-port установить IP-адрес с портом для exm: 192.168.0.1:80