Всім привіт, вирішив трохи поділитися навичками. Перш за все уточню що я не вважаю за доцільне детально описувати процесс встановлення 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-адреси пристроям.
Є ще доволі багато цікавих налаштувань які ми можемо зробити на нашому шлюзі, але цей допис про базове налаштування. Тому про прокидання портів та інщі цікаві штуки розпишу іншим разом.