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

Хотите превратить ваш ПК в маршрутизатор для небольшой локальной сети? Я опишу процесс создания сети в серии записей в моём блоге. Эта, вступительная часть, описывает настройку интерфейсов и NAT. В следующих частях я опишу установку и настройку DHCP-сервера, настройку DNS-кеширования, а так-же настройку прокси-сервера для нашей локальной сети.

Ну, приступим... Для начала вы должны определить, какой сетевой интерфейс(сетевая карта и т.п.) смотрит в создаваемую вами локальную сеть, а какой - в сеть дающую вам доступ в интернет. Сделать это можно командой:


  sudo ifconfig

Для примера я выбрал свою домашнюю сеть. В ней есть кабель от интернет-провайдера, маршрутизатор TP-LINK, раздающий интернет по WiFi, и от него кабель к ПК на с установленной на него ОС Ubuntu. Интернет я получаю из сети, которой рулит этот маршрутизатор. Это сеть 192.168.3.1. У вас это может быть внутридомовая сеть, сеть провайдера и т.п. Важно, что мой ПК(который я превращаю в маршрутизатор) подключен к данной сети через интерфейс eth0. А раздавать интернет мы будем на узлы создаваемой нами локальной сети через интерфейс eth1, как показано на изображении:

Маршрутизатор на базе Ubuntu

Вы уже разобрались, какой интерфейс у вас смотрит в вашу локальную сеть(которую вы создаёте), а какой во внешнюю сеть(из которой вы получаете интернет)? Читая данное руководство помните, что вы должны eth0 заменять на ваш интерфейс смотрящий в сеть, откуда вы получаете интернет. А eth1 заменяем на интерфейс, через который ваш маршрутизатор подключен в создаваемую вами локальную сеть.

Будем считать, что раз вы уже имеете доступ в интернет, значит интерфейс eth0 уже настроен. Остаётся настроить интерфейс eth1(смотрящий в нашу локальную сеть), что мы и сделаем.

Редактируем файл /etc/network/interfaces(командой sudo gedit /etc/network/interfaces), добавляем в него описание настроек интерфейса eth1:


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

Где:
iface - сетевой интерфейс, смотрящий в локальную сеть. address - IP-адресс вашей машины в локальной сети. netmask - маска сети, определяющая часть IP-адресса отвечающую за адрес сети, в которой расположен данный IP, и часть отвечающую за адресс конкретной машины в этой сети. network - адрес создаваемой нами локальной сети broadcast - широковещательный адрес(подробнее о адресах, используемых в сети я писал в посте “Термины, используемые при настройки сети”).

Перезапускаем networking командой:


  sudo service networking restart

Командой ifconfig проверяем, что наши изменения вступили в силу.

Настройка NAT(преобразования сетевых адресов)

Сеть так устроена, что каждый интерфейс слушает только пакеты, адресованные ему, и отбрасывает пакеты, которые адресуются интерфейсам на других адресах. Для того, что-бы пакеты адресованные интерфейсу eth1 перенаправлялись на интерфейс eth0(другими словами чтобы узлы из локальной сети могли обращаться к узлам из внешней сети), нужно настроить NAT.

Включаем поддержку перенаправления портов Включите перенаправление портов. Откройте файл /etc/sysctl.conf:

<code ="bash">
sudo gedit /etc/sysctl.conf
</code>

Найдите строку “net.ipv4.ip_forward = 0” и измените 0 на 1. Строка должна иметь такой вид:


net.ipv4.ip_forward = 1

Если по какой-то причине данная строка отсутствует, добавьте её. Внесённые изменения вступят в силу после перезагрузки. Что-бы лишний раз не перезагружаться, в консоли выполните команду:


 sudo sysctl -p

или


  sudo sh -c ‘echo 1 > /proc/sys/net/ipv4/ip_forward’

Настройка правил iptables для работы NAT

Важно: Если вы уже пытались настроить раньше сеть, и прописали какие-то правила для вашего интерфейса, смотрящего в локальную сеть - возможно вам прийдётся их очистить перед установкой новых правил. И убедитесь, что у вас установлен пакет iptables.

Прописываем правила для преобразования сетевых адресов(NAT). По этому правилу исходящие через интерфейс eth0 сообщения(пакеты) будут изменяться таким образом, что адрес инициатора сообщения будет подменяться адресом маршрутизатора, служащего посредником в общении узлов из разных сетей.


  sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Так-же мы должны добавить правило, которое позволит нам перенаправлять запросы с интерфейса eth1 на eth0:


  sudo iptables -I FORWARD -i eth1 -o eth0 -j ACCEPT

И правило, позволяющее пакетам с интерфейса eth0 перенаправляться на eth1, если соединение было установлено по инициативе узла из локальной сети:


  sudo iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT

После перезагрузки правила iptables прийдётся задавать заново. Что-бы не делать этого вручную, сохраните их:


sudo sh -c 'iptables-save > /etc/iptables.up.rules'

И добавьте в конец файла /etc/network/interfaces строку, которая будет автоматически восстанавливать ваши правила перед поднятием сетевого интерфейса:


pre-up iptables-restore < /etc/iptables.up.rules

</code>

Теперь достаточно указать сетевые настроки на узлах нашей локальной сети, и всё заработает. Указываем следующие настройки:

  • address - IP-адрес в диапазоне 192.168.0.2-192.168.0.254
  • netmask - маска сети, 255.255.255.0
  • gateway - адрес шлюза(маршрутизатора), которым в созданной вами сети служит настроенный вами маршрутизатор на Ubuntu. Его адрес - 192.168.0.1
  • DNS - укажите адрес DNS-сервера(или нескольких).В качестве DNS-сервера вы можете указать:
    • Google DNS(8.8.8.8, 8.8.4.4)
    • любой другой публичный DNS
    • DNS-сервер(сервера) вашего интернет-провайдера
    • DNS-сервер сети, к которой подключен ваш маршрутизатор.

Поздравляю, ваша сеть настроена. Можете с чувством выполненного долга идти пить чай.