У меня есть хост 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 / серверах маршрутизации / межсетевого экрана? Есть ли способ настроить его по-другому?

1 ответ1

2

эти строки выглядят как настройки довольно низкого уровня (заглушки для достижения желаемого поведения временно?) так как не выживает перезагрузка. [...]
как обычно такая задача выполняется на 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 .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .