Port forwarding through a Linux Gateway

  • 70th day of Discord, in the yold 3176
  • 3 Comments

How to forward ports through a Linux gateway with iptables.

English version of this page under construction. You can read automatic translation.


Часто в системном администрировании может потребоваться осуществление переадресации портов (port forwarding) через linux-шлюз. Прежде всего, такая необходимость появляется, когда вы хотите сделать доступными ресурсы локальной сети в сеть внешнюю. В этой статье будет дан пример на базе ОС Ubuntu, хотя аналогичным образом перенаправление можно будет осуществить в любой другой linux-системе, с помощью функционала iptables.

Для начала стоит ввести команду
ifconfig
и определить для себя две вещи: интерфейс связывающий шлюз со внешней сетью (допустим eth0) и внешний ip-адрес шлюза на этом интерфейсе (допустим 123.123.123.123).

Далее, предположим, вам надо пробросить ssh-порт одной из машин локальной сети.
Для этого под root-пользователем введите следующие команды:

iptables -t nat -A POSTROUTING -s 192.168.0.100 -o eth0 -j MASQUERADE

(где 192.168.0.100 – ip-адрес локальной машины, эта команда делает доступной этот хост для построутинга)

iptables -t nat -A PREROUTING -p tcp -d 123.123.123.123 --dport 20022 -j DNAT --to-destination 192.168.0.100:22
iptables -t filter -A FORWARD -i eth0 -d 192.168.0.100 -p tcp --dport 20022 -j ACCEPT

(где 20022 – порт, на который будет переадресация с 192.168.0.100:22)

Вам, соответственно, надо будет поменять адреса, порты и имя интерфейса в этих двух командах.

Аналогичным образом можно настроить любое количество перенаправляемых портов, в случае, если вы сделали все верно, то можно внести эти настройки в автозагрузку в системе Ubuntu двумя способами:

– как описано в конце этой статьи, сохранив всю нынешнюю конфигурацию iptables и добавив ее в поднятие сетевого интерфейса;

– или как описано в этой статье, написав отдельный скрипт с этими командами и добавив его в init.d.

  1. Art says:

    Нифига не работает !!!

  2. Anonymous says:

    Допишите пожалуйста,
    – как отредактировать правило? Например была допущена ошибка при вводе. И что бы не размножать правила, нужно найти нужное, отредактировать.
    – как Сохранить?
    – как удалить правило?
    – как временно отключить или заблокировать, если это возможно?
    – как экспортировать все правила в файл, для последующего переноса на новый шлюз с последующим импортированием?
    – в каком файле хранятся, созданные, правила?
    Спасибо.

    • info says:

      – как отредактировать правило? Например была допущена ошибка при вводе. И что бы не размножать правила, нужно найти нужное, отредактировать.
      – как Сохранить?
      – как временно отключить или заблокировать, если это возможно?
      – как экспортировать все правила в файл, для последующего переноса на новый шлюз с последующим импортированием?

      Вот для этих пунктов подойдёт:
      iptables-save > /etc/iptables.up.rules
      отредактировать файл /etc/iptables.up.rules
      iptables-restore < /etc/iptables.up.rules

      – как удалить правило?

      iptables -L -n --line-numbers
      iptables -D INPUT num или
      iptables -D FORWARD num или
      iptables -D OUTPUT num
      (где num - порядковый номер правила, отображаемый первой командой)

      – в каком файле хранятся, созданные, правила?

      Такого отдельного файла в Ubuntu нет, правила хранятся в таблицах ядра. Посмотреть можно здесь:
      /proc/net/ip_tables*

Leave a Comment

Your email address will not be published. Required fields are marked *