Linux в роли роутера

Две сетевые карты. К первой (eth0) сетевой карте подключен интернет. Ко второй (eth1) подключен коммутатор - все остальные компьютеры образующие локальную сеть подключаются к нему.

  • Создание локальной сети - привязка определённых ip к заданным MAC адресам и автоматическое назначение ip для остальных
  • Кеширование dns (более быстрый доступ к сайтам)
  • Раздача интернета для компьютеров, подключенных к коммутатору.
  • Перенаправление портов (port forwarding)

Настройка сетевых интерфейсов #

Карточки могут определиться не так, как вы хотите, eth0 как eth1 и наоборот. Чтобы изменить их названия отредактируйте этот файл:

sudoedit /etc/udev/rules.d/70-persistent-net.rules

В нём нужно изменить только директивы NAME. Строчки при этом местами менять не нужно. Это нужно сделать только если вас не устраивают текущие названия интерфейсов.

Теперь пропишем карточке смотрящей в локальную сеть статический ip:

sudoedit /etc/network/interfaces

Добавляйте eth1 (lo и eth0 уже должны присутствовать):

# The loopback network interface
auto lo
iface lo inet loopback

# External
auto eth0
iface eth0 inet dhcp

# Internal
auto eth1
iface eth1 inet static
  address 192.168.0.1
  network 192.168.0.0
  netmask 255.255.255.0
  broadcast 192.168.0.255

Перезапуск сети, чтобы применить нужные настройки:

sudo invoke-rc.d networking stop && sudo invoke-rc.d networking start

Вывод команды ifconfig должен показать, что у обеих карточек появились айпишники.

dnsmasq #

sudo aptitude install dnsmasq

Файл настроек dnsmasq больше похож на результат команды man, в этой простыне нет ни одной включенной настройки.

Поэтому сохраняем оригинал и начинаем с чистого листа:

mv /etc/dnsmasq.{conf,conf.bak}
sudoedit /etc/dnsmasq.conf

Добавляйте следующие строки:

listen-address=192.168.0.1
cache-size=500
dhcp-range=192.168.0.10,192.168.0.30

# Wi-Fi
# 192.168.0.2

# laundry
dhcp-host=ZZ:D5:d7:ZH:FL:12,192.168.0.3
  • listen-address, ip на котором будет работать dnsmasq.
  • cache-size, количество запоминаемых имён (по умолчанию 150).
  • dhcp-range задаёт диапазон выдаваемых ip. Обратите внимание на то, что в этот диапазон не должны входить зарезервированные с помощью dhcp-host адреса.
  • dhcp-host привязывает ip по MAC (hwaddr) или имени компьютера.

Перезагружайте dnsmasq и сеть:

sudo /etc/init.d/dnsmasq restart
sudo invoke-rc.d networking stop && sudo invoke-rc.d networking start

Теперь можно подключать компьютеры локальной сети к коммутатору — они будут получать айпи.

Кеширование DNS #

Уже включено. Осталось только добавить dnsmasq в список dns. Список этот находится в /etc/resolv.conf и создаётся автоматически при подключении eth0. Поэтому редактировать его напрямую нельзя, при следующем получении dns все ваши изменения автоматически и затрутся.

Поэтому:

sudoedit /etc/dhcp/dhclient.conf

Раскомментируйте опцию и измените её ip:

prepend domain-name-servers 192.168.0.1;

Сделать это одной командой:

sed -i 's/#prepend domain-name-servers 127.0.0.1/prepend domain-name-servers 192.168.0.1/' /etc/dhcp/dhclient.conf

Перезапускайте сетевые интерфейсы:

sudo invoke-rc.d networking stop && sudo invoke-rc.d networking start

И проверяйте результат:

cat /etc/resolv.conf

Вы должны увидеть что-нибудь похожее на это:

nameserver 192.168.0.1
nameserver x.x.x.x
nameserver y.y.y.y

Где x.x.x.x и y.y.y.y серверы провайдера.

Теперь сравнивайте задержки введя эту команду два раза:

dig google.com | egrep 'Query time|SERVER'

Если первая задержка может быть и 120msec, то вторая и последующие уже 0msec. Сервер по этим запросам должен отображаться локальный (192.168.0.1).

Iptables #

Раздаём интернет на компьютеры локальной сети #

sudoedit /etc/sysctl.conf

Раскомментируйте строчку net.ipv4.ip_forward = 1.

Одной коммандой:

sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf

Чтобы ничего не перезагружать введите эти команды:

sudo sysctl -p

sudo iptables -P FORWARD ACCEPT
sudo iptables --table nat -A POSTROUTING -o eth0 -j MASQUERADE

Перенаправление портов #

33044 на 192.168.0.3

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 33044 -j DNAT --to-destination 192.168.0.3

Однако вы не сможете подключиться к серверу из вашей локальной сети через связку внешний ip : пробрасываемый порт - либо используйте внутренний ip (это предпочтительный вариант для всех не web серверов), либо используйте эти правила:

81 на 192.168.0.3

iptables -t nat -A PREROUTING -d z.z.z.z -p tcp --dport 81 -j DNAT --to-destination 192.168.0.3
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 192.168.0.0/24 -o eth1 -j MASQUERADE

Где z.z.z.z - внешний ip.

Автозагрузка правил

Чтобы команды iptables загружались автоматически после каждой перезагрузки можно добавить их в /etc/rc.local перед exit 0:

#!/bin/sh

# Net
iptables -P FORWARD ACCEPT
iptables --table nat -A POSTROUTING -o eth0 -j MASQUERADE

# uTorrent
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 36063 -j DNAT --to-destination 192.168.0.3

exit 0

Для удаления всех правил используйте эту команду:

sudo iptables -F && sudo iptables -X && sudo iptables -t nat -F && sudo iptables -t nat -X

Чтобы правила из /etc/rc.local заработали без перезагрузки:

sudo /etc/rc.local

Комментарии

123123

Ах как подробно, в закладки! Спасибо!

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