Linux: iptables пробрасываем порты наружу Часто возникает необходимость зайти через интернет на оборудование (сервер, компьютер или еще какой девайс) которое находится за файерволом и не имеет внешнего ip адреса. О том как это сделать написано много, но в большинстве случаев статьи длинные и не совсем понятные. Мы постараемся одним простым примером показать как это делается.

[ad#ad-2]
Прежде чем рассказать как настроить iptables для проброса портов в локальную сеть, хочется отметить что любой проброс в локалку - это еще одна открытая дыра в защите сети. И не просто сети а информации которая в ней хранится. Но уже если надо, и риск оправдан то делается это так:

# iptables -t nat -A PREROUTING -p tcp -d $EXT_FW_IP --dport $EXT_FW_PORT -j DNAT --to-destination $LOCAL_IP:$LOCAL_PORT

Где

$EXT_FW_IP - адрес файервола(маршрутизатора/сервера) который виден из интернета
$EXT_FW_PORT - порт файервола(маршрутизатора/сервера) который виден из интернета 
$LOCAL_IP - адрес нашего оборудование в локальной сети (то оборудование на которое мы хотим попасть)
$LOCAL_PORT - порт на который надо попасть на нашем локальном оборудовании

Рассмотрим пример:
Например у нас есть сервер отвечающий за хранение файлов в локальной сети. Ему незачем светиться в интернете. Доступ к интернету у него есть только через NAT для обновления установленных пакетов. В качестве файервола в нашей локальной сети выступает еще один сервер под управлением LINUX.
Пусть на файерволе внешний ip адрес 44.44.44.44, мы хотим получить доступ по ssh к нашему файл-серверу. Файл сервер имеет ip адрес 10.0.1.1. Под проброс выделим внешний порт 8082
Делаем проброс

iptables -t nat -A PREROUTING -p tcp -d 44.44.44.44 --dport 8082 -j DNAT --to-destination 10.0.1.1:22

И теперь выполнив ssh -l user_name 44.44.44.44:8082 мы попадем на стандартный ssh порт нашего сервера в локальной сети.