Ubutu 20.04 Router (Gateway)

Всім привіт, вирішив трохи поділитися навичками. Перш за все уточню що я не вважаю за доцільне детально описувати процесс встановлення linux. В більшості випадків ви будете встановлювати систему за допомогою певного інтерфейсу, що є інтуїтивно зрозумілим. Припустимо ви вже маєте п.к. з двома мережевими картами та інсталювали туди ubuntu 20.04. Взагалі то цей підхід буде працювати майже на будь якій debian-like системі але з певними коррективами.

Шлюз це певна система що дозволяє пристроям із внутрішньої мережі спілкуватися з пристроями у зовнішній. Наприклад ваш роутер являє собою шлюз. Припустимо що в нашому випадку сервер має дві мережеві карти. одна з них “enp5s0” підключена до зовнішньої мережі (тобто до провайдера). а друга “enp6s0” до внутрішньої(тобто до роутера).

Налаштування мережевих карт

Останні версії ubuntu використовують netplan.io для налаштування мережевих карт у вашій системі. Деякі системи використовують Ifupdown, про те у мережі наявні дописи про налаштування з тією тулзою. А от про netplan робочих інструкцій не дуже багато. Перш за все раджу ознайомитись з документацією до netplan.

Більшість провайдерів використовує mac-адресу для привязки пристрою до абонента, тому почнемо з налаштування mac-адреси. Якщо спробуєте загуглити як присвоїти специфічну mac-адресу мережевій карті то знайдете ось таку версію:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp5s0:
      dhcp4: true
      macaddress: "мас-адреса що треба присвоїти"
      match:
        macaddress: "мас-адреса карти (заводська)"

Така конфігурація навіть працює, на останніх версіях версіях netplan. Але через якийсь баг не працювала на початку. До того ж,певні провайдери “не розуміють” зміну мак адресу таким чином як це робить netplan. Тому, якщо у вас все вийшло налаштувати таким чином, то залиште, якщо ні, то є сенс прибрати встановлення мак-адреси з конфігу netplan та змінити його за допомогою udev.

Створюємо файл /etc/udev/rules.d/75-mac-spoof.rules та додаєму у нього наступне правило

#/etc/udev/rules.d/75-mac-spoof.rules
ACTION=="add", SUBSYSTEM=="net", ATTR{address}=="{mac-адреса вашої карти}", RUN+="/usr/bin/ip link set dev %k address {mac-адреса яка має бути}"

Звісно якщо ви маєте можливість зареєструвати у провайдера mac-вдресу вашої мережевої карти то буде найпростіший шлях.

Далі, скоріш за все, вам знадобиться налаштувати статичну ip адресу (Якшо ні – залиште опцію dhcp4:true). Netplan конфіг з статичним ip буде виглядати ось так:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp5s0:
     dhcp4: no
     addresses: [192.168.1.222/24]
     gateway4: 192.168.1.1
     nameservers:
       addresses: [8.8.8.8,8.8.4.4]

Не забудьте вказати налаштування ip-адреси які видав вам провайдер, а також вказати dns-сервери вашого провайдера. Якщо повністю з урахуавнням зміни mac-адреси та двох мережевих карт наш конфіг буде виглядати приблизно так:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp5s0:
     dhcp4: no
     macaddress: "мас-адреса що треба присвоїти"
     match:
       macaddress: "мас-адреса карти (заводська)"
     addresses: [192.168.1.222/24]
     gateway4: 192.168.1.1
     nameservers:
       addresses: [8.8.8.8,8.8.4.4]
    enp6s0:
      dhcp4: no
      addresses: [192.168.88.1/24]

Зверніть увагу що для “внутрішньої” мережевої карти нам потрібна лише ip адреса. Щоб примінити нащі налаштування запускаємо команду:


sudo netplan apply

#А в разі, якщо щось пішло не так можемо запустити команду так:
sudo netplan apply --debug 

Про те, якщо ви все зробили правильно дебаг не знадобиться ))

Налаштування шлюзу

Ip та mac адреси ми вже налаштували вів справи зроблено. Далі треба зробити сам шлюз, для цього потрыбно лише двы команди. Є різні місця куди ті команди можна прописати але я зазвичай виношу і окремий файл та запускаю як сервіс. Тому створюємо файл /etc/firewall/iptables і записуємо у нього команду для iptables та для вмикання ip-форвардингу.

#! /bin/sh
#
/sbin/iptables -t nat -A POSTROUTING -o enp5s0 -j MASQUERADE
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "Firewall started"
exit 0

Далі позначємой файл як такий що має виконуватись:


sudo chmod +x /etc/firewall/iptables

Якщо ви запустите той файл руками то шлюз вже буде працювати. Але тыльки до перезавантаження системи. Щоб наш скрипт запускався при завантаженні системи а також щоб мати можливість увімкнути або вимкнути його автозапуск створемо файл: /etc/systemd/system/router.service

[Unit]
After=network.service

[Service]
ExecStart=/etc/firewall/iptables

[Install]
WantedBy=default.target

Далі запускаємо команду щоб система пересканувала сервіси та вмикаємо запуск нашого сервісу при завантаженні:


#Скануємо сервіси
sudo systemctl daemon-reload

#Вмикаємо наш сервіс
sudo systemctl enable router.service

#Запускаємо наш роутер якщо щє цього не зробили
sudo systemctl start router

Після перезавантаження системи роутер буде запущено автоматично.

Автоматичні IP-адреси

Щоб трохи поліпшити нам життя у внутрішній мережі варто налаштувати автоматичну роздачу ip-адрес. Це позбваить нас необхідності додатково налаштовувати роутер або ip-адреси інших пристроїв підєднаних до мережі, якщо роутера в ній немає.

Більщість мануалів що ви знайдете в мережі радять налаштувати “dnsmasq” для автоматичної роздачі адрес, але “dnsmasq” конфліктує з “systemd” що встановлений в системі за замовчуванням. Тому ми налаштуэмо “isc-dhcp-server”. Перш за все його треба встановити


sudo apt-get update

sudo apt install isc-dhcp-server

Далі робимо резервну копію файлу конфігу, та редагуємо його


sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bakup

sudo nano /etc/dhcp/dhcpd.conf

Набір потрібних нам опцій виглядає приблизно так:

# простенький /etc/dhcp/dhcpd.conf
default-lease-time 600;
max-lease-time 7200;
authoritative;
 
subnet 192.168.88.0 netmask 255.255.255.0 {
 range 192.168.88.10 192.168.88.200;
 option routers 192.168.88.1;
 option domain-name-servers 8.8.8.8, 8.8.4.4;
}

Тут ми вказали що:

  • Час видачі адреси за замовчуванням – 10 хвилин
  • Максимальний час оренди – 2і години
  • Наш dhcp-сервер э головним у мережі
  • Вказали адреси шлюза та dns що будуть видані пристроям в мережі

Не забудьте вписати ваші ip-адреси та dns-сервери. Додатково ми можемо присвоїти фіксовані адреси пристроям базуючись на їх mac-адресах. Конфіг з такими налаштуваннями буде виглядати приблизно так:

# простенький /etc/dhcp/dhcpd.conf
default-lease-time 600;
max-lease-time 7200;
authoritative;
 
subnet 192.168.88.0 netmask 255.255.255.0 {
 range 192.168.88.10 192.168.88.200;
 option routers 192.168.88.1;
 option domain-name-servers 8.8.8.8, 8.8.4.4;
}

host tplink {
  hardware ethernet 60:a4:b7:fe:cd:38;
  fixed-address 192.168.88.3;
}

host nas {
  hardware ethernet 60:a4:b7:fe:cd:46;
  fixed-address 192.168.88.5;
}

Тако ж треба вказати для котрої з мережевих карт нам потрібна роздача адрес. Цей конфіг знаходиться в іншому місці: (/etc/default/isc-dhcp-server)

# /etc/default/isc-dhcp-server

INTERFACESv4="enp6s0"
INTERFACESv6=""

Перезапускаэмо наш dhcp сервер


sudo systemctl restart isc-dhcp-server

sudo systemctl status isc-dhcp-server

Якщо ви все зробили правильно то команда статус вам покаже що сервіс працює. Наш шлюз готовий до використання і сам роздає ip-адреси пристроям.

Є ще доволі багато цікавих налаштувань які ми можемо зробити на нашому шлюзі, але цей допис про базове налаштування. Тому про прокидання портів та інщі цікаві штуки розпишу іншим разом.