Подробная инстукция по установке и настройке роутера в связке iptables + dnsmasq на Gentoo GNU/Linux.
Исходные данные
Имеем на машине 2 сетевых интерфейса:
enp0s3 — для внешней сети 192.168.1.0/24
enp0s8 — для внутренней сети 192.168.55.0/24
Также у нас есть шлюз во внешней сети. Это маршрутизатор с IP-адресом 192.168.1.1
Наша задача — настроить доступ в Интернет для внутренней сети. Для этого необходимо выполнить несколько этапов:
- проверить поддержку необходимого функционала ядром Gentoo
- включить в загрузку системы необходимые службы и параметры
- создать правила для firewall
- установить и настроить службы dns и dhcp при помощи dnsmasq
- проверить работу на других машинах в сети
В первую очередь необходимо убедиться в том, что в ядре включены соответствующие функции. Для этого необходимо перейти в утилиту настройки ядра
# cd /usr/src/linux # make menuconfig
и включить все (лучше всего) пункты в разделах Networking support — Networking options — Network packet filtering framework (Netfilter) и Networking support — Networking options — Core Netfilter Configuration и Networking support — Networking options — Network packet filtering framework (Netfilter) и Networking support — Networking options — IP: Netfilter Configuration
Если включены, то этот пункт пропускаем, если отключены — придётся пересобрать и переустановить ядро и возможно его модули. О настройке и установке ядра можно почитать на Gentoo Wiki.
Затем открываем файл /etc/conf.d/net
# nano /etc/conf.d/net
и здесь задаём конфигурацию второго сетевого интерфейса (enp0s8).
Создадим на него символьную ссылку
# cd /etc/init.d # ln -s net.lo net.enp0s8
и добавим его в автозагрузку
# rc-update add net.enp0s8 default
После этого открываем файл /etc/sysctl.conf
# nano /etc/sysctl.conf
и изменим параметр net.ipv4.ip_forward с 0 на 1
net.ipv4.ip_forward="1"
Теперь запустим сетевой интерфейс
# /etc/init.d/net.enp0s8 start
Затем запускаем стандартные правила iptables
# iptables -F # iptables -t nat -A POSTROUTING -o enp0s+ -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 enp0s+ -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 enp0s+ -j ACCEPT # iptables -t filter -A FORWARD -o enp0s+ -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
и сохраняем их в файл /var/lib/iptables/rules-save
# iptables-save > /var/lib/iptables/rules-save
Далее внесём службу iptables в автозагрузку и запустим её
# rc-update add iptables default # rc-service iptables start
Убедимся, что правила iptables работают
# iptables -nvL
Устанавливаем dnsmasq
# emerge --ask dnsmasq
открываем файл /etc/dnsmasq.conf
# nano /etc/dnsmasq.conf
и в самом конце файла впишем такие строчки:
domain-needed bogus-priv interface=enp0s8 resolv-file=/etc/resolv.conf dhcp-range=192.168.55.31,192.168.55.130,24h cache-size=150
Затем внесём службу dnsmasq в автозагрузку
# rc-service add dnsmasq default
На этом этапе лучше всего будет перезагрузить машину
# shutdown -r now
проверить, работают ли службы iptables и dnsmasq
# rc-service iptables status # rc-service dnsmasq status
правила iptables
# iptables -nvL
и подключить другие машины в сети.
После этого dnsmasq должен будет раздать IP-адреса клиентам в сети, и также необходимо будет проверить наличие интернета на клиентских машинах. Если всё это выполняется, то настройка проведена правильно.