Роутер на Gentoo

Подробная инстукция по установке и настройке роутера в связке 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-адреса клиентам в сети, и также необходимо будет проверить наличие интернета на клиентских машинах. Если всё это выполняется, то настройка проведена правильно.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *