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

Linux: маршрутизация трафика между двумя сетями с помощью iptables

Хорошо, это странная настройка сети, но я пытаюсь перенести интернет из одной сети в другую.

headless server ((((( wireless router (other network)-----internet
       |
       |
router (my network) ))))) wireless computers
   |   |   |
wired computers

Итак, в основном у меня есть безголовый Linux-сервер, который я хочу настроить в качестве маршрутизатора между моей сетью (eth0) и другой сетью (wlan0). Я должен уметь настраивать все остальное, но я не очень разбираюсь в iptables.

Я делал то же самое раньше между двумя проводными сетями, но я никогда не записывал правила.

На самом деле для базовой маршрутизации вам не нужны iptables - iptables помогает с фильтрацией и NAT (и другими вещами тоже).

Вы можете активировать пересылку пакетов с помощью:

sysctl -w net.ipv4.conf.all.forwarding=1

Добавить net.ipv4.conf.all.forwarding=1 в /etc/sysctl.conf, чтобы настройка закрепилась.

Если вы являются фильтрация на сервере (вы можете проверить это с помощью iptables -nvL - если цепочка FORWARD имеет политику ACCEPT, которую вы не фильтруете), вам необходимо добавить правила, разрешающие пересылку пакетов между сетями:

iptables -I FORWARD -i eth0 -o wlan0 -s wi.red.net.work/24 -d wire.less.net.work/24 -j ACCEPT
iptables -I FORWARD -i wlan0 -o eth0 -s wire.less.net.work/24 -d wi.red.net.work/24 -j ACCEPT

Если вы не фильтруете, но хотите (кстати, вы тоже должны - см. Комментарий @Red Tux, рекомендуется фильтровать по умолчанию и разрешать только минимум), добавьте предыдущие правила плюс это:

iptables -P FORWARD DROP

Это изменяет политику, поэтому все пакеты, не соответствующие никаким правилам, отбрасываются.

Кроме того, если вы стремитесь к реальной безопасности, вам, вероятно, также следует отфильтровать цепочку INPUT. Эта цепочка обрабатывает запросы, поступающие на ваш маршрутизатор с IP-адресом назначения, который соответствует одному из его собственных, то есть входящие соединения (например, SSH). Разумным значением по умолчанию было бы:

iptables -I INPUT -i eth0 -s allowed.admin.ip.here -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -i lo -j ACCEPT
iptables -P INPUT DROP # make sure you've put your IP on the first rule before running this 
                       # or you'll lock you out of the server

Это позволяет использовать SSH только с определенного хоста в проводной сети (обратите внимание на предупреждение), разрешает весь трафик на интерфейсе обратной связи (требуется некоторым программным обеспечением) и отбрасывает все остальное.

Как видите, вы можете разрешить только некоторые порты, используя -p tcp|udp --dport N. Вам следует подумать о том, чтобы сделать это и в цепочке FORWARD для повышения безопасности.