Краткое руководство по настройке роутера в связке iptables + dnsmasq, а также проброс портов по IP-адресам машин в локальной сети на примере Astra Linux «Смоленск» 1.7.1. Также подойдёт для «Воронежа» и других редакций.
Исходные данные
Имеем на машине 2 сетевых интерфейса:
- eth0 — для внешней сети 192.168.1.0/24
- eth1 — для внутренней сети 192.168.100.0/24
Также у нас есть шлюз во внешней сети. Это маршрутизатор с IP-адресом 192.168.1.1
Наша задача — настроить доступ в Интернет для внутренней сети.
Открываем файл /etc/sysctl.conf
# nano /etc/sysctl.conf
и раскомментировать строчку
net.ipv4.ip_forward=1
Проверяем
# sysctl -p
Должен быть такой ответ:
net.ipv4.ip_forward = 1
Теперь создадим правила iptables. Для этого создадим каталог /etc/firewall/ и файл /etc/firewall/iptables.sh
# mkdir /etc/firewall/ # touch /etc/firewall/iptables.sh
открываем его
# nano /etc/firewall/iptables.sh
и в нём пропишем такой скрипт:
#!/bin/sh iptables -F iptables -t nat -A POSTROUTING -o eth+ -j MASQUERADE iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -t filter -A INPUT -p icmp -j ACCEPT iptables -t filter -A INPUT -i lo -j ACCEPT iptables -t filter -A INPUT -i eth+ -j ACCEPT iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -t filter -A FORWARD -p icmp -j ACCEPT iptables -t filter -A FORWARD -i lo -j ACCEPT iptables -t filter -A FORWARD -i eth+ -j ACCEPT iptables -t filter -A FORWARD -o eth+ -j ACCEPT iptables -t filter -A INPUT -j REJECT --reject-with icmp-host-prohibited iptables -t filter -A FORWARD -j REJECT --reject-with icmp-host-prohibited iptables-save > /etc/network/iptables
Делаем его исполняемым
# chmod u+x /etc/firewall/iptables.sh
Теперь откроем файл /etc/network/interfaces
# nano /etc/network/interfaces
и в самом конце пропишем строчку:
pre-up iptables-restore < /etc/network/iptables
Также создадим файл /etc/network/iptables
# touch /etc/network/iptables
Теперь вернёмся к файлу /etc/firewall/iptables.sh — запускаем скрипт
# sh /etc/firewall/iptables.sh
Правила файрволла активируются и пропишутся в /etc/network/iptables. В дальнейшем, при перезагрузке системы, система будет тянуть правила из него.
Далее установим dnsmasq
# apt install dnsmasq
После установки система сама запустит службу dnsmasq и добавит её в автозагрузку. Это можно проверить командой:
# systemctl status dnsmasq
Консоль покажет:
Loaded: loaded Active: active (running)
После этого открываем файл /etc/dnsmasq.conf
# nano /etc/dnsmasq.conf
и в нём пропишем такой конфиг:
domain-needed bogus-priv interface=eth1 resolv-file=/etc/resolv.conf dhcp-range=192.168.100.131,192.168.100.180,24h cache-size=150
Перезапускаем службу dnsmasq
# systemctl restart dnsmasq
Теперь роутер должен работать и машины в сети получать ip-адреса и dns.
При необходимости в пробросе портов по IP-адресам для доступа из внешней сети нужно снова открыть скрипт /etc/firewall/iptables.sh
# nano /etc/firewall/iptables.sh
в нём после строчки
iptables -t nat -A POSTROUTING -o eth+ -j MASQUERADE
добавить такие:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 1234 -j DNAT --to-destination 192.168.100.111:1234 iptables -t nat -A PREROUTING -i eth0 -p udp --dport 5678 -j DNAT --to-destination 192.168.100.112:5678
а после строчки
iptables -t filter -A INPUT -i eth+ -j ACCEPT
добавить такие:
iptables -t filter -A INPUT -p tcp -m state --state NEW -m tcp --dport 1234 -j ACCEPT iptables -t filter -A INPUT -p tcp -m state --state NEW -m udp --dport 5678 -j ACCEPT
- 1234 и 5678 — номера портов
- tcp и udp — протоколы
- 192.168.100.111 и 192.168.100.112 — ip-адреса машин в локальной (внутренней) сети
Затем снова запускаем скрипт /etc/firewall/iptables.sh
# sh /etc/firewall/iptables.sh
чтобы изменения вступили в силу.
Новые правила заново перечитаются и запишутся в файл /etc/network/iptables, а уже из этого файла при перезагрузке сервера будут автоматически запускаться эти правила.