Недавно нашей задачей было установить общедоступные компьютеры за отдельным маршрутизатором для контроля доступа в Интернет. Поскольку у нас полно компьютерных компонентов, мы решили построить маршрутизатор на более старом компьютере с операционной системой Ubuntu Server 18.04.1 LTS (Bionic Beaver).
Мы написали это руководство, чтобы помочь другим с подобной задачей.
Во-первых, нам нужно настроить сетевые интерфейсы, которые мы будем использовать. В нашем случае 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
Далее мы настроим 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. Возможно, отсутствует точка с запятой или скобка.
Чтобы иметь функциональный маршрутизатор, нам нужно правильно настроить брандмауэр. Это делается путем записи некоторых правил 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, и мы готовы к работе. 🙂
Как жалко, что я не нашёл этот сайт, когда создавал свой первый сервер на Debian 7! Ранее более 25 лет работал сисадмином в сетях Windows. Переход на Linux был большим шагом “в толщину”, “насобирал” столько шишек на свою голову… Лет 7 искал, как сделать маршрутизатор на Debian, затем на CentOS. Сейчас в связи с неразрешимыми проблемами в CentOS, в частности крайне нестабильной работе сервера Samba, перевёл домашний сервер на Ubuntu 18.04.2 и эта статья мне крайне своевременна, назрела необходимость раздачи интернет по локальной сети в сельском доме. Настройки 4G роутера крайне скудные. Огромное спасибо автору статьи за очень важную для меня информацию. Николай.
сделал все копипастом. ip по dhcp получаю, но интернет не раздаёт(((
копипаст это здорово, а сетевые интерфейсы у вас точно совпадают?!
Мне, например, везде пришлось менять eth0 на eno1, а eth1 на enp1s0.
И да, это третья по счету испытанная статья из 10-и выбитых гуглом и наконец всё заработало)))
Все(кроме dhcp) сделал как в статье файл rc.local позже пропал и я его не удалял.
Как удалить изменения которые сделал скрипт???
Перезагрузить компьютер. iptables обнуляется при каждой перезагрузке, для того и нужен скрипт…
А если еще WiFi интерфейс я просто дописываю строки под него или там ее что то более существенное? допустим у меня еще помимо LAN два вай фай модуля.
Я 8 раз переустанавливал UBUNTU 18.04 server.
У меня даже с этой статьей были проблемы. Но после настройки DNS на bind9 + samba + доменный контроль + squid = статья зашла на ура.
Все работает отлично. Доменному автоматически раздает ip и доступ в интернет.