Назад | Перейти на главную страницу

Исходящий трафик виртуального моста firewalld в туннель vpn

В конце концов я решил сесть и сделать то, что давно было в моем списке дел: заставить мою виртуальную сеть действительно работать.

Проще говоря: у меня есть чистое виртуальное мостовое устройство (созданное ifcfg-script при загрузке), к которому libvirtd подключает гостевые os: ses по мере их появления. Также на мосту работает dnsmasq-dhcp. Поскольку мост виртуальный, доступа в Интернет нет, и устройство openvpn tun0 нельзя напрямую добавить к мосту. Теперь моя цель - перенаправить весь исходящий трафик на интерфейс tun0. Казалось бы, легкая работа с прямыми правилами firewalld, но я потратил на нее один день.

Внутренний трафик на мосту работает нормально, включая DHCP, но не смог заставить исходящий трафик работать вообще. Проблема не в таблицах маршрутизации (использование iproute2 для второй таблицы маршрутизации для tun0, проверка с помощью curl --interface ... для получения внешнего ip-адреса tun0) или самого соединения openvpn.

Без лишних слов, вот мои файлы конфигурации:

ifcfg-tun0:

DEVICE=tun0
BOOTPROTO=none
ONBOOT=no
TUNNEL=’tun’

ifcfg-virtbr10:

DEVICE=virbr10
NAME=virbr10 
NM_CONTROLLED=no 
ONBOOT=yes 
TYPE=Bridge 
DELAY=2 
STP=on 
IPADDR=10.8.3.1 
NETMASK=255.255.255.0 
IPV6INIT=no 
ZONE=virbr10

/etc/firewalld/direct.xml:

<?xml version="1.0" encoding="utf-8"?>
 <direct>
  <rule priority="0" table="nat" ipv="ipv4" chain="POSTROUTING">-o tun0 -j MASQUERADE</rule>
  <rule priority="0" table="filter" ipv="ipv4" chain="FORWARD">-o tun0 -i virbr10 -m state --state RELATED,ESTABLISHED -j ACCEPT</rule>
  <rule priority="0" table="filter" ipv="ipv4" chain="FORWARD">-o virbr10 -i tun0</rule>
</direct>

и некоторые команды:

брандмауэр-cmd --get-активные-зоны:

home
  interfaces: enp2s0 br0
virbr10
  interfaces: virbr10
purevpn
  interfaces: tun0

firewall-cmd --zone = purevpn --query-masquerade:

  yes

Все службы запущены и работают без ошибок, и я просматривал эти файлы в течение нескольких часов, не замечая никаких явных ошибок. Любая помощь приветствуется. Есть одна вещь, с которой я не уверен, что делать, и это то, что команда "firewall-cmd --permanent --direct --get-all-rules" ничего не возвращает. Хотя я не уверен, что это так.

Да, и система - это CentOS 7, а vpn - это openvpn с некоторыми настраиваемыми скриптами для заполнения второй таблицы маршрутизации.

edit: забыл упомянуть, что маршрутизация включена в /etc/sysctl.conf.

edit2: Было указано, что я на самом деле не задавал никаких вопросов ... Так что кто-нибудь заметил какую-либо (менее) очевидную ошибку, которую я сделал, или есть какие-либо идеи, как заставить эту сеть работать так, как задумано.

Через какое-то время мне удалось это исправить самостоятельно. Моя конфигурация сама по себе не была неправильной (хотя я переписал прямые правила), но не была полной. Я понял, что хотя мой виртуальный мост может пересылать пакеты на интерфейс tun0, он этого не делает, потому что маршрут по умолчанию отсутствует. Т.е. он не знает, что может отправлять пакеты в tun0. Просто исправлено добавлением третьей таблицы маршрутизации для интерфейса virbr10 и изменением сценария openvpn route-up-up, чтобы добавить маршрут по умолчанию в эту таблицу после установления соединения. Это в сочетании с пересмотренными правилами пересылки firewalld, казалось, помогло.