исходящий трафик виртуального моста 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>

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

firewall-cmd --get-active-zone:

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.[1276 visibleedit2: Было указано, что я на самом деле не задавал никаких вопросов ... Заметил ли кто-нибудь какую-либо (менее) очевидную ошибку, которую я сделал, или есть идеи, как заставить эту сеть работать так, как задумано.

0
задан 22 January 2018 в 23:04
1 ответ

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

0
ответ дан 5 December 2019 в 06:45

Теги

Похожие вопросы