Как использовать хост Linux для NAT и переадресации портов

391
xakepp35

У меня есть хост Debian 9 с 2 интерфейсами:

  • eth0, подключен к интернету; имеет динамический IP, назначенный провайдером
  • eth1, подключенный к коммутатору локальной сети; имеет статический IP; установил теплые дружеские отношения с dhcpd

У меня есть цель заставить этот ПК работать как обычный домашний маршрутизатор - «делиться интернет-соединением», перенаправлять трафик. Выше указанных твиков не хватило для маршрутизации трафика. Я нашел способ включить его:

modprobe iptable_nat echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -A FORWARD -i eth1 -j ACCEPT 

Когда я набрал его, rootя достиг желаемого результата. Кроме того, я не понимаю, что здесь происходит (например, «могу ли я заменить MASQUERADEна POOL_PARTY?» - отличный пример несамостоятельного синтаксиса команд!) Основная проблема в том, что эти строки выглядят как довольно низкоуровневая настройка (заглушки для достижения желаемого поведения временно?) как не выживает перезагрузка. После перезагрузки:

  • lsmod | grep ip показывает мне, что модуль загружен
  • cat /proc/sys/net/ipv4/ip_forward печать 0
  • sudo iptables -S дает пустой список правил

Я имею в виду, как обычно такая задача выполняется на Linux / серверах маршрутизации / межсетевого экрана? Есть ли способ настроить его по-другому?

0

1 ответ на вопрос

2
Kamil Maciorowski

эти строки выглядят как настройки довольно низкого уровня (заглушки для достижения желаемого поведения временно?), так как они не выживают после перезагрузки. […]
Как обычно такая задача выполняется на Linux-серверах маршрутизации / межсетевого экрана? Есть ли способ настроить его по-другому?

Более высокий уровень должен иметь программное обеспечение брандмауэра (например, shorewallили ufw), которое будет устанавливать правила фильтрации пакетов при каждой загрузке в соответствии с его конфигурацией.

Если вы знаете, как выполнить любую команду при загрузке ( /etc/rc.localэто самый простой метод, не обязательно лучший), вы можете выполнить свои iptablesкоманды таким образом. Это похоже на решение бедного человека.

Дополнительно смотрите man 8 iptables-saveи man 8 iptables-restore.

Основной способ навсегда изменить /proc/sys/net/ipv4/ip_forwardэто редактировать /etc/sysctl.conf. Вы можете даже иметь эти строки в файле:

# Uncomment the next line to enable packet forwarding for IPv4 #net.ipv4.ip_forward=1 

Возможно, вам не понадобится редактировать файл, если вы используете брандмауэр, который достаточно умен, чтобы самостоятельно изменять настройки всякий раз, когда вам это нужно, когда брандмауэр работает. Я не могу сказать, какие брандмауэры делают это (если есть), но это возможно в целом.


отличный пример не требующего объяснения синтаксиса команд

Почему это должно быть самоочевидным? У нас есть manи другие ресурсы для этого. man 8 iptablesукажет вам, man 8 iptables-extensionsчто довольно огромно. Смею вас изобрести самообъясняющий синтаксис, способный заменить руководство. :)


У меня есть хост Debian 9, с 2 интерфейсами […], которые работают как обычный домашний маршрутизатор

Моя установка точно. Я в порядке с shorewall.

Похожие вопросы