В данной статье рассмотрим настройку сервера Ubuntu Server 26.04, который будет выполнять функции маршрутизатора, DHCP-сервера и VPN-сервера WireGuard с удобным веб-интерфейсом управления.

Исходные данные

Сервер оснащен двумя сетевыми интерфейсами:

Интерфейс Назначение
enp2s0 Внешняя сеть (WAN)
enp4s0 Внутренняя сеть (LAN)

1. Настройка сети

Отредактируйте файл конфигурации Netplan:

nano /etc/netplan/01-router.yaml

Укажите следующую конфигурацию:

network:
  ethernets:
    enp2s0:
      addresses:
      - x.x.x.x/24
      dhcp6: true
      nameservers:
        addresses:
        - 8.8.8.8
        search: []
      routes:
      - to: default
        via: x.x.x.x
      set-name: enp2s0

    enp4s0:
      dhcp4: false
      addresses:
        - 192.168.1.1/24
      accept-ra: true

  version: 2

Сохраняем (Ctrl+O) и выходим из редактора (Ctrl+X).

Проверьте конфигурацию:

netplan try

Если ошибок нет, примените настройки:

netplan apply

 

2. Настройка DHCP-сервера

Установите DHCP-сервер:

apt update
apt install -y isc-dhcp-server

Укажите внутренний интерфейс:

nano /etc/default/isc-dhcp-server
INTERFACESv4="enp4s0"

Далее настройте DHCP:

nano /etc/dhcp/dhcpd.conf
authoritative;
default-lease-time 600;
max-lease-time 7200;

option domain-name "lan";
option domain-name-servers 1.1.1.1, 8.8.8.8;

subnet 192.168.1.0 netmask 255.255.255.0 {

    range 192.168.1.100 192.168.1.200;

    option routers 192.168.1.1;
    option subnet-mask 255.255.255.0;
    option broadcast-address 192.168.1.255;

}

Запустите службу:

systemctl enable isc-dhcp-server
systemctl restart isc-dhcp-server

Проверьте состояние:

systemctl status isc-dhcp-server

3. Настройка межсетевого экрана (iptables)

Создайте скрипт настройки firewall:

nano /usr/local/sbin/firewall.sh

Вставьте следующий код:

#!/bin/bash

WAN=enp2s0
LAN=enp4s0
LAN_NET=192.168.1.0/24
RDP_HOST=192.168.1.200

echo "[+] Resetting rules..."

iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X

echo "[+] Default policies..."

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

echo "[+] Allow loopback..."

iptables -A INPUT -i lo -j ACCEPT

echo "[+] Allow established connections..."

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

echo "[+] SSH access..."

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

echo "[+] Ping (ICMP)..."

iptables -A INPUT -p icmp -j ACCEPT
iptables -A FORWARD -p icmp -j ACCEPT

echo "[+] WireGuard..."

iptables -A INPUT -p udp --dport 51820 -j ACCEPT

echo "[+] LAN -> WAN forwarding..."

iptables -A FORWARD -i $LAN -o $WAN -j ACCEPT

echo "[+] NAT (Masquerade)..."

iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE

echo "[+] Port forwarding RDP..."

iptables -t nat -A PREROUTING -i $WAN -p tcp --dport 3389 -j DNAT --to-destination $RDP_HOST:3389
iptables -A FORWARD -p tcp -d $RDP_HOST --dport 3389 -j ACCEPT

echo "[+] LAN access to router..."

iptables -A INPUT -i $LAN -j ACCEPT

echo "[+] Done."

Сделайте скрипт исполняемым:

chmod +x /usr/local/sbin/firewall.sh
/usr/local/sbin/firewall.sh

Для сохранения правил после перезагрузки установите:

apt install iptables-persistent

Включение маршрутизации

Разрешите пересылку пакетов между интерфейсами:

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

4. Установка WireGuard с веб-интерфейсом

Установите необходимые компоненты:

apt install -y qrencode

curl -fsSL https://raw.githubusercontent.com/itsredbull/wireguard-ui-installer/main/install.sh | bash

После завершения установки будут автоматически развернуты:

  • WireGuard;
  • Web-интерфейс WireGuard UI;
  • Docker-контейнер для управления VPN.

Откройте браузер и перейдите по адресу:

http://192.168.1.1:5000

Стандартные учетные данные:

Логин: admin
Пароль: admin

Настройка WireGuard

Откройте раздел WireGuard Server Settings и измените параметры.

Server Interface Addresses

10.252.1.1/24

Post Up Script

iptables -t nat -A POSTROUTING -s 10.252.1.0/24 -o enp2s0 -j MASQUERADE; iptables -A FORWARD -i wg0 -o enp2s0 -j ACCEPT; iptables -A FORWARD -i enp2s0 -o wg0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

Post Down Script

iptables -t nat -D POSTROUTING -s 10.252.1.0/24 -o enp2s0 -j MASQUERADE; iptables -D FORWARD -i wg0 -o enp2s0 -j ACCEPT; iptables -D FORWARD -i enp2s0 -o wg0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

После сохранения настроек убедитесь, что VPN функционирует корректно.

5. Настройка отправки конфигураций по электронной почте

WireGuard UI умеет автоматически отправлять пользователям конфигурационные файлы и QR-коды.

Откройте файл Docker Compose:

nano /etc/wireguard-ui/docker-compose.yml

Добавьте параметры SMTP:

services:
  wireguard-ui:
    image: ngoduykhanh/wireguard-ui:latest
    container_name: wireguard-ui

    volumes:
      - ./db:/app/db
      - /etc/wireguard:/etc/wireguard

    ports:
      - "5000:5000"

    environment:
      - BIND_ADDRESS=0.0.0.0:5000
      - WGUI_USERNAME=admin
      - WGUI_PASSWORD=admin
      - WGUI_CONFIG_FILE_PATH=/etc/wireguard/wg0.conf
      - WGUI_MANAGE_START=true
      - WGUI_MANAGE_RESTART=true

      - SMTP_HOSTNAME=mail.example.ru
      - SMTP_PORT=587
      - SMTP_AUTH_TYPE=LOGIN
      - SMTP_USERNAME=wireguard@example.ru
      - SMTP_PASSWORD=<SMTP_PASSWORD>
      - EMAIL_FROM_ADDRESS=wireguard@example.ru
      - EMAIL_FROM_NAME=WireGuard

    cap_add:
      - NET_ADMIN

    restart: unless-stopped

Перезапустите контейнер:

cd /etc/wireguard-ui

docker compose down
docker compose up -d

После перезапуска WireGuard UI сможет автоматически отправлять пользователям VPN-конфигурации и QR-коды по электронной почте.

После выполнения всех описанных шагов сервер Ubuntu будет выполнять функции:

  • маршрутизатора между локальной сетью и Интернетом;
  • DHCP-сервера;
  • NAT-шлюза;
  • межсетевого экрана (iptables);
  • VPN-сервера WireGuard;
  • веб-панели управления WireGuard;
  • сервера автоматической отправки VPN-конфигураций пользователям по электронной почте.
Настраиваем роутер на базе Ubuntu 26.04

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *