У меня есть веб-служба, работающая на порту X. Она никогда не предназначалась для работы вне локальной сети, но я хотел бы получить к ней доступ через Интернет. Поэтому мне нужно изменить исходный IP-адрес всех входящих пакетов на локальный (например, 192.168.2.100). В противном случае веб-служба ответит ошибкой.
Итак, вот что мне нужно:
Если я отправлю пакет с домашнего компьютера с общедоступным IP-адресом X на общедоступный IP-адрес Y моего сервера, исходный IP-адрес (в этом случае X) необходимо изменить на локальный (например, 192.168.2.1). После этого пакет должен быть передан веб-приложению, работающему на том же сервере через порт 80.
OK, теперь я думаю, что я понимаю, что вы хотите. Это очень особенный случай и отличается от обычного -переадресации портов, который я опубликовал ранее (см. ниже). Следующие правила должны это делать.
Я предполагаю следующее:
: публичный IP сервера
: публичный IP клиента
: внутренний IP сервера (192. 168.2.1
)
: внутренний "поддельный" IP клиента (192.168.2.100
)
: внешний интерфейс (т.е. 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>
Не забудьте ACCEPT пакеты в таблице фильтрации.
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
. Замените интерфейс , протокол , dport и to-destination своими настройками.
Это правило примет измененный пакет:
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, если ваша сетевая карта не находится на eth0
Edit #1
You can for --dport and --to-port set ip address address whit port for exm: 192. 168.0.1:80