Недавно нашей задачей было установить общедоступные компьютеры за отдельным маршрутизатором для контроля доступа в Интернет. Поскольку у нас полно компьютерных компонентов, мы решили построить маршрутизатор на более старом компьютере с операционной системой Ubuntu Server 18.04.1 LTS (Bionic Beaver).
Мы написали это руководство, чтобы помочь другим с подобной задачей.
ПРЕДПОСЫЛКИ
- Компьютер под управлением Ubuntu Server 18.04.1 LTS. Не будем вдаваться в подробности установки операционной системы Ubuntu. Это довольно просто.
- Как минимум два сетевых интерфейса. Один предназначен для глобальной сети, а другой – для локальной сети маршрутизатора. Вы также можете использовать некоторые коммутаторы в случае, если вы собираетесь подключить несколько устройств в локальной сети, купить коммутаторы или маршрутизаторы можно на сайте http://spw.ru/. Но это почти все, что вам нужно для работающего роутера.
1. НАСТРОЙКА СЕТЕВЫХ ИНТЕРФЕЙСОВ
Во-первых, нам нужно настроить сетевые интерфейсы, которые мы будем использовать. В нашем случае eth0 будет WAN, а eth1 LAN.
WAN (eth0) – этот интерфейс получит IP от провайдера, поэтому мы оставляем его с помощью DHCP.
LAN (eth1) – мы настраиваем интерфейс со статическим IP внутри подсети, которую мы будем использовать для локальной сети
Небольшое замечание: Ubuntu 18.04 не использует традиционный файл конфигурации сети /etc/network/interfaces. Он использует NETPLAN. В нашем случае, есть конфигурационный файл, называется 50-cloud-init.yaml внутри папки /etc/netplan/. В вашем случае файл может иметь другое имя, просто найдите файл с расширением.yaml внутри папки netplan.
Давайте откроем это с помощью nano:
sudo nano /etc/netplan/50-cloud-init.yaml
Отредактируйте его в соответствии с потребностями вашей сети, в моем примере я настроил это так:
# Этот файл создан на основе информации, предоставленной # источник данных. Изменения в нем не будут сохраняться во всем экземпляре. # Чтобы отключить возможности сетевой конфигурации cloud-init, напишите файл # /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg со следующим: # network: {config: disabled}
network: ethernets: eth0: dhcp4: true eth1: addresses: - 192.168.1.1/24 dhcp4: false nameservers: addresses: - 8.8.8.8 - 8.8.4.4 search: [] version: 2
Подводя итог: eth0, который является WAN, получает IP от модема интернет-провайдера. Eth1 является частью локальной сети маршрутизатора. Нам нужен статический IP и DNS-серверы (в нашем примере мы использовал Google). Также мы не настроили ни один шлюз на eth1.
Сохраните конфигурацию с помощью следующих команд:
sudo netplan generate sudo netplan apply
2. НАСТРОЙКА СЕРВЕРА DHCP
Далее мы настроим DHCP-сервер. Мы действительно не хотим настраивать каждый клиент со статическим IP в сети LAN. Для этой задачи нам нужно установить следующий пакет.
sudo apt-get install isc-dhcp-server
Далее нам нужно отредактировать файл /etc/default/isc-dhcp-server. Это сообщает DHCP-серверу, какой сетевой интерфейс он должен прослушивать. В нашем случае это конечно eth1, интерфейс локальной сети.
Вводим команду:
sudo nano /etc/default/isc-dhcp-server
А под «INTERFACESv4» вставьте сетевой интерфейс вашей локальной сети. В нашем случае это eth1 :
INTERFACESv4 = "eth1"
Следующим шагом будет настройка DHCP-сервера. Это делается путем редактирования файла /etc/dhcp/dhcpd.conf
sudo nano /etc/dhcp/dhcpd.conf
Вот куча разных параметров, большинство из них комментируются # перед каждой строкой. Короче говоря, мы запишем только те параметры, которые мы использовал, и/или отредактируем их в соответствии со своими потребностями. Если вы хотите, вы можете удалить все содержимое этого файла и просто скопировать/вставить код ниже. Конечно, вы меняете IP-адреса, шлюзы и т. д. В соответствии с вашей собственной конфигурацией сети.
option domain-name "whatever.you.want"; option domain-name-servers 8.8.8.8, 8.8.4.4; default-lease-time 600; max-lease-time 7200; ddns-update-style none; authoritative; log-facility local7; subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.101 192.168.1.200; option subnet-mask 255.255.255.0; option routers 192.168.1.1; option broadcast-address 192.168.1.255; }
Теперь давайте применим настройки и включим DHCP-сервер при загрузке с помощью следующих команд:
sudo systemctl restart isc-dhcp-server sudo systemctl enable isc-dhcp-server
С помощью следующей команды мы проверяем статус.
sudo systemctl status isc-dhcp-server
Если все настроено правильно, должна быть строка «ACTIVE». В противном случае вы что-то напутали в файле /etc/dhcp/dhcpd.conf. Возможно, отсутствует точка с запятой или скобка.
3. НАСТРОЙКА ФАЙЕРВОЛА
Чтобы иметь функциональный маршрутизатор, нам нужно правильно настроить брандмауэр. Это делается путем записи некоторых правил iptables. Чтобы сохранить правила при перезапуске сервера, мы создали скрипт, который будет выполняться во время загрузки.
Сначала давайте включим UFW с…
sudo ufw enable
Далее нам нужно включить пересылку пакетов из WAN в LAN. У нас следующий параметр внутри файла /etc/ufw/sysctl.conf:
Открываем файл…
sudo nano /etc/ufw/sysctl.conf
… и мы просто удаляем # перед следующей строкой:
net/ipv4/ip_forward=1
В Ubuntu 18.04 файл /etc/rc.local больше не существует. Но мы все еще можем создать это с:
sudo nano /etc/rc.local
Затем скопируйте/вставьте следующий скрипт. Есть комментарии, объясняющие каждое правило iptables. Вы можете удалить их, если хотите, но вы НЕ должны удалять #! /bin/bash. Также измените eth0 и eth1, если ваши сетевые интерфейсы имеют несколько разных имен.
#!/bin/bash # /etc/rc.local # Default policy to drop all incoming packets. iptables -P INPUT DROP iptables -P FORWARD DROP # Accept incoming packets from localhost and the LAN interface. iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -i eth1 -j ACCEPT # Accept incoming packets from the WAN if the router initiated the connection. iptables -A INPUT -i eth0 -m conntrack \ --ctstate ESTABLISHED,RELATED -j ACCEPT # Forward LAN packets to the WAN. iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT # Forward WAN packets to the LAN if the LAN initiated the connection. iptables -A FORWARD -i eth0 -o eth1 -m conntrack \ --ctstate ESTABLISHED,RELATED -j ACCEPT # NAT traffic going out the WAN interface. iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # rc.local needs to exit with 0 exit 0
Этот сценарий должен выполняться во время загрузки, поэтому нам нужно сделать файл исполняемым с помощью следующей команды:
sudo chmod 755 /etc/rc.local
И это все. Мы перезагружаем маршрутизатор с помощью команды sudo reboot, и мы готовы к работе. 🙂