Назад | Перейти на главную страницу

Перенаправление портов с помощью iptables и dhcpd

Настройка: У меня есть Linux (Gentoo, если это имеет значение), который служит шлюзом для всей квартиры. Этот ящик творит чудеса NAT с iptables и dhcpd.

Эта проблема: У меня есть определенный компьютер, на который я хочу перенаправить порт (для торрентов, если, опять же, есть разница).

У меня достаточно навыков администрирования Linux, чтобы прочитать инструкции и правильно настроить все (в конечном итоге), но инструкции, которые я нашел для своего случая, были слишком неясными и казались излишне сложными.

Для того, что я собрал, у меня двоякая проблема: заставить dhcpd надежно назначить определенный статический IP-адрес компьютеру, который я хочу, а затем настроить iptables для переадресации портов.

Может ли кто-нибудь дать мне конкретное пошаговое руководство, как это сделать? Я уверен, что я не единственный, кто этого хочет ...


Редактировать: Мои версии программного обеспечения:

# iptables --version
iptables v1.4.0

# dhcpd --version
isc-dhcpd-V3.1.1-Gentoo

Чтобы dhcp надежно назначал определенный статический IP-адрес компьютеру, который вам нужен, обычно нужно изучить, как сообщить вашему DHCP-серверу (независимо от того, какой из них вы работаете) статически сопоставить MAC-адрес с IP-адресом. Это заставит его всегда выдавать один и тот же IP-адрес (который вы указываете) на этот MAC-адрес.

ISC dhcp нуждается в строфе конфигурации вроде

host mycomputer {
  hardware ethernet 00:12:34:56:78:9A;
  fixed-address 192.168.1.10;
}

dnsmasq нужна строка вроде:

dhcp-host=00:12:34:56:78:9A,192.168.1.10

сведения о которых указаны в справочная страница.

где:

  • мой компьютер имя хоста вашего компьютера
  • 00: 12: 34: 56: 78: 9A это MAC-адрес вашего компьютера
  • 192.168.1.10 IP-адрес, который вы хотите всегда назначать этому MAC-адресу

Как только это будет сделано, у вас теперь есть «статический» IP-адрес для перенаправления вашего порта. Для этого вы хотите, как говорит @Avery Payne, сделать:

iptables -t nat -I PREROUTING -s ! {internal-network} -d {public-address} -p tcp --dport {port-on-public-address} -j DNAT --to-dest {internal-address}

где:

  • внутренняя сеть это IP-адрес вашей сети, т.е. 192.168.1.0
  • внутренний адрес - это IP-адрес, представляющий хост, который вы хотите открыть, т.е. 192.168.1.10
  • публичный адресс это IP-адрес интерфейса, обращенного к вашему интернет-провайдеру
  • порт по общедоступному адресу это номер порта, на который будет приходить трафик, если бы ваш внутренний компьютер мог его видеть; обратите внимание, что это правило не меняет номер порта при пересылке, оно просто передает пакет

Обратите внимание на пробел между -s, восклицательным знаком и {внутренняя-сеть}, не забудьте оставить пробелы с обеих сторон.

iptables -t nat -I PREROUTING -s ! {internal-network} -d {public-address} -p tcp --dport {port-on-public-address} -j DNAT --to-dest {internal-address}

где:

  • внутренняя сеть это IP-адрес вашей сети, т.е. 192.168.1.0
  • внутренний адрес - это IP-адрес, представляющий хост, который вы хотите открыть, т.е. 192.168.1.2
  • публичный адресс это IP-адрес интерфейса, обращенного к вашему интернет-провайдеру
  • порт по общедоступному адресу номер порта, на который будет приходить трафик, если бы ваш внутренний компьютер мог его видеть; обратите внимание, что это правило не меняет номер порта при пересылке, оно просто передает пакет

Обратите внимание на пробел между -s, восклицательным знаком и {internal-network}, не забудьте поставить пробел на обе стороны.