На некоторые устройства не очень удобно или вообще невозможно поставить приложения, которые позволяют создавать тоннели или изменять роутинг.

Можно создать в сети несколько VLAN и на точке доступа WiFi на каждую создать свой SSID (имя точки) и иметь несколько "виртуальных" WiFi точек с разными маршрутами и тоннелями.

Здесь мы рассмотрим настройку такой схемы с роутером на pfSense, точкой доступа на OpenWRT и отдельным линуксом для тоннеля в VM на Proxmox. Эти идеи можно использовать и в других комбинациях железа и софта.

Подразумевается, что вы знаете, как настраивать ваше железо, но вам некогда самому придумывать эту схему и искать все пункты многочисленных меню в нужном порядке.

Роутер: pfSense

Все примеры валидны для pfSense 2.8.0, но кажется уже несколько версий в этих меню ничего не менялось.

Рассмотрим добавление дополнительного VLAN с роутингом этого VLAN через сервер, который мы настроим в следующем разделе.

Добавляем VLAN

Заходим в Interfaces -> VLANs, нажимаем Add и добавляем новый тег. Например, 4. Parent Interface должен быть LAN.

Теперь в Interfaces -> Interface Assignments в Available network ports выбираем VLAN4 и нажимаем кнопку Add. Новый интерфейс появляется в списке. Удобно исправить его имя OPTn на тот же VLAN4 и настроить подсеть.

  • IPv4 Configuration Type: Static IPv4

  • IPv4 Address: 192.168.4.1 / 24

  • IPv4 Upstream gateway: none

Ниже здесь же мелким шрифтом подписано, почему последний пункт важен и где нужно добавлять gateway (куда пойдёт весь трафик нашего VLAN вместо маршрута по-умолчанию).

Добавляем gateway

Переходим в System -> Routing -> Gateways. Здесь у вас скорее всего есть Default gateway для IPv4 и, возможно, для IPv6. Нажимаем Add и добавляем ещё один.

  • Interface: LAN – или другой, если ваш сервер в отдельном VLAN

  • Address Family: IPv4

  • Name: GW_1

  • Gateway: 192.168.10.12

  • Gateway Action: Disable Gateway Monitoring Action

Осталось добавить правила в файрвол.

Добавляем правила в firewall

Переходим в Firewall -> Rules -> VLAN4.

Первое правило, пропускаем весь трафик из VLAN4 в LAN:

  • Action: Pass

  • Interface: VLAN4

  • Address Family: IPv4

  • Protocol: Any

  • Source: VLAN4 Subnets

  • Destination: LAN Subnets

Для этого правила в Advanced Options ничего не трогаем.

Второе правило, весь остальной трафик отправляем в созданный выше GW_1.

  • Action: Pass

  • Interface: VLAN4

  • Address Family: IPv4

  • Protocol: Any

  • Source: VLAN4 Subnets

  • Destination: Any

  • Gateway: GW_1

Последний пункт находится в Advanced Options.

Правила должны идти именно в таком порядке.

Включаем DHCP сервер

Переходим в Services -> DHCP Server -> VLAN4:

  • Enable: ✅

  • Address Pool Range: 192.168.4.128 – 192.168.4.253

Здесь обычно можно ничего не трогать, но посмотрите внимательно на настройки DNS с точки зрения доступности серверов с тоннелем и без.

Сервер: Debian на VM в Proxmox

Сразу отвечу на вопрос, если Proxmox и Linux, то почему VM, а не CT.

Мой тоннель не захотел запускаться в контейнере. Он коммерческий и возможно это часть его защиты. Если ваш тоннель работает в CT, ничего не мешает запускать его там.

Конфигурация VM на Proxmox

Мы не будем рассматривать настройку какого-то конкретного тоннеля. Для целей этого текста подойдёт любой, который может автоматически запускаться на старте сервера и поднимать tun0.

Параметры VM с запасом: 2 ядра CPU, 2 GB RAM, остальные настройки по-умолчанию. Обычный Debian 12 подойдёт. Выбираем чекбоксы без всяго UI, но с доступом по ssh. Для сети указываем статический адрес, который мы описали выше, как GW_1.

Не забудьте добавить нужные сети в файрвол вашей VM.

В одном из следующих разделов сюда возможно добавятся правила для других сетей.

  • Direction: in

  • Action: ACCEPT

  • Source: 192.168.4.0/24

  • Enable: ✅

  • Log level: nolog – но можно поставить info на время настройки

Естественно, нужно разрешить и доступ по ssh с того места, откуда вы будете настраивать VM.

Настройка сервера

Теперь нужно в /etc/sysctl.conf раскомментировать или добавить строку net.ipv4.ip_forward=1

# Обновляем систему после установки и ставим нужные пакеты
apt update
apt dist-upgrade
apt install iptables iptables-persistent

# Удаляем правила
iptables -F
iptables -t nat -F

# Принимаем всё, что прошло файрвол Proxmox
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

# Добавляем NAT для VLAN4 через tun0
iptables -t nat -A POSTROUTING -s 192.168.4.0/24 -o tun0 -j MASQUERADE
# Повторяем эту строку для каждой сети из конфигурации раздела настройки remote access ниже

# Проверяем, что получилось
iptables -t nat -L -v

# Сохраняем
netfilter-persistent save

Можно перезагрузиться, чтобы сработало обновление sysctl.conf и проверить, как сохранились правила файрвола.

Должно быть примерно так:

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether bc:24:11:37:09:9e brd ff:ff:ff:ff:ff:ff
    altname enp0s18
    inet 192.168.10.12/24 brd 192.168.10.255 scope global ens18
       valid_lft forever preferred_lft forever
31: tun0: ...
    link/none
    inet x.x.x.x peer x.x.x.x/32 scope global tun0
       valid_lft forever preferred_lft forever

$ sudo iptables -t nat -L -v
Chain PREROUTING (policy ACCEPT 4388 packets, 1089K bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain INPUT (policy ACCEPT 58 packets, 6016 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 36935 packets, 2448K bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 36507 packets, 2420K bytes)
 pkts bytes target     prot opt in     out     source               destination
 3300  919K MASQUERADE  all  --  any    tun0    192.168.4.0/24       anywhere

WiFi: OpenWRT

Производитель давно перестал обновлять прошивку для моей точки доступа, хотя железо ещё достаточно хорошо. Тем более, что сама прошивка скорее напоминает анекдот (см. п.2).

При этом нельзя сказать, что такую настройку невозможно сделать в оригинальной прошивке. Так что если у вас не OpenWRT, скорее всего ваша точка доступа на это тоже способна. Общие принципы будут те же, менюшки немного другие.

Полностью настройку OpenWRT описывать нет смысла, это тема для другого текста, и не одного. Опишем процесс добавления отдельного SSID для выбранного VLAN. Пути в меню верны для версии OpenWrt 24.10.

Добавляем VLAN

Переходим в Network -> Interfaces и выбираем таб Devices. Нажимаем Add device configuration, там выбираем:

  • Device type: VLAN (802.1q)

  • Base device: eth0

  • VLAN ID: 4

  • Device name: eth0.4 – подставится само

  • Enable IPv6: disabled

Дальше Save и Save&Apply.

Добавляем bridge

Ещё раз нажимаем Add device configuration:

  • Device type: bridge device

  • Device name: br-lan4

  • Ports: eth0.4

Опять Save и Save&Apply.

Добавляем интерфейс

Теперь выбираем таб Interfaces, там Add new interface...

  • Name: vlan4

  • Protocol: Static address

  • Device: br-lan4

и нажимаем Create interface.

Здесь указываем адрес интерфейса из нашего VLAN:

  • IPv4 address: 192.168.4.3 – любой уникальный, который не будет выдаваться роутером по DHCP

  • IPv4 netmask: 255.255.255.0

  • IPv4 gateway: 192.168.4.1

В табе DHCP Server выбираем чекбокс Ignore interface. Ешё раз Save и Save&Apply.

Добавляем SSID

Конфигурация почти готова, осталось в Network -> Wireless добавить собственно SSID. Выберите Add в radio0 или radio1. Поскольку у вас уже есть минимум один SSID, считаем, что в секции Device Configuration всё настроено и переходим сразу в Interface Configuration.

  • ESSID: имя вашей точки. можно просто добавить -4 к основному имени

  • Network: vlan4

Остальные настройки по вкусу, не забудте заглянуть в Wireless Security.

Бонус: доступ к сети снаружи (remote access)

Если у вас есть "белый" IPv4 (без NAT провайдера, обычно за отдельную регулярную плату) или IPv6, можно легко сделать доступ не только к вашей сети, но и к добавленному выше тоннелю.

В pfSense его можно настроить, например, через WireGuard.

Как настраивать сам WireGuard, лучше посмотреть в документации pfSense, дублировать здесь нет смысла.

Основные моменты, которые важны для нашей конфигурации.

Нужно взять из WireGuard -> Tunnels -> Interface Addresses все сети, которые вы хотите маршрутизировать через этот тоннель, и добавить их в правила всех файрволов, настроенных выше.

В Firewall -> Rules -> WireGuard нужно добавить два правила.
Первое правило:

  • Action: Pass

  • Interface: WireGuard

  • Address Family: IPv4

  • Protocol: Any

  • Source: Network xxx.xxx.xxx.0/24 – подсеть для WireGuard

  • Destination: LAN Subnets

  • Gateway: GW_1

Второе правило:

  • Action: Pass

  • Interface: WireGuard

  • Address Family: IPv4

  • Protocol: Any

  • Source: Network xxx.xxx.xxx.0/24 – подсеть для WireGuard

  • Destination: Any

  • Gateway: GW_1

Можно не добавлять первое правило и тогда весь трафик будет уходить сразу в тоннель, без доступа к внутренним сетям.

Также нужно добавить правила в файрвол VM и в NAT на сервере с тоннелем, как было описано выше.

Disclaimer

Автор делится личным опытом, полученным на собственном оборудовании, и не призывает ни повторять, ни избегать описанных действий.
Все возможные последствия использования этой информации остаются на ответственности читателя.

Комментарии (0)