Рейтинг:0

Как работать с DNS-запросами при использовании нескольких соединений OpenVPN и маршрутов на основе политик?

флаг de

У меня есть 2 подсети в моей локальной сети (192.168.4.0/24, 192.168.5.0/24), но только 1 сервер шлюза (192.168.4.223), который имеет 2 соединения OpenVPN (10.100.2.6/24, 10.100.3.6/24) . Топология такая: введите описание изображения здесь

Я хочу, чтобы компьютеры с адресом 192.168.4.0/24 (например, компьютер B) подключались к Интернету через сервер OpenVPN 2, а компьютеры с адресом 192.168.5.0/24 (например, компьютер A) подключались к Интернету через сервер OpenVPN 1.

На OPENWRT маршрутизатор:

## Что я сделал:
vi /etc/iproute2/rt_tables 
...
110 myovp # Добавляем таблицу для 192.168.5.0/24
...
# Затем добавьте правила для iproute2 и iptables:
ip правило добавить fwmark 110 таблица 110
ip правило добавить в основную таблицу 192.168.4.0/24
ip route добавить по умолчанию через 192.168.4.223 dev br-lan_1 таблица 110
iptables -t mangle -A PREROUTING -i br-lan_2 -j MARK --set-mark 110

## Некоторые выводы:
# Вывод `ip rule`:
0: из всех локальных поисковых систем
32764: со всех на 192.168.4.0/24 поиск основной
32765: из всех поисковых запросов fwmark 0x6e myovp
32766: из всех основных поисковых запросов
32767: из всех поисковых запросов по умолчанию
# Вывод `ip route show`:
192.168.4.0/24 dev br-lan_1 ссылка на область ядра прото src 192.168.4.1
192.168.5.0/24 dev br-lan_2 ссылка на область ядра прото src 192.168.5.1
# Вывод `ip route show table 110`:
по умолчанию через 192.168.4.223 dev br-lan_1
# Вывод `iptables -t mangle -L PREROUTING -v`
Цепочка PREROUTING (политика ACCEPT 871K пакетов, 177M байт)
 pkts bytes target prot opt ​​in out source target
28030 1954K ПОМЕТИТЬ все -- br-lan_2 любое где угодно где угодно ПОМЕТИТЬ установить 0x6e

На Сервер шлюза Debian:

## Что я сделал:
vi /etc/iproute2/rt_tables 
...
110 myovp # Добавляем таблицу для 192.168.5.0/24
...
# Затем добавьте правила для iproute2 и iptables:
ip правило добавить fwmark 110 таблица 110
ip правило добавить в основную таблицу 192.168.4.0/24
ip правило добавить в основную таблицу 192.168.5.0/24
ip route добавить по умолчанию через 10.100.2.1 dev tun0 таблица 110
ip маршрут добавить 192.168.5.0/24 через 192.168.4.1 dev enp4s0
iptables -t mangle -A PREROUTING -i enp4s0 -s 192.168.5.0/24 -j MARK --set-mark 110
# Затем добавляем правила для NAT и FORWARD:
iptables -A ВПЕРЕД -i enp4s0 -j ​​ПРИНЯТЬ
iptables -A FORWARD -i tun1 -o enp4s0 -m состояние --state СВЯЗАННО, УСТАНОВЛЕНО -j ПРИНЯТЬ
iptables -A FORWARD -i enp4s0 -o tun1 -m состояние --state СВЯЗАННО, УСТАНОВЛЕНО -j ПРИНЯТЬ
iptables -A FORWARD -i tun0 -o enp4s0 -m состояние --state СВЯЗАННО, УСТАНОВЛЕНО -j ПРИНЯТЬ
iptables -A FORWARD -i enp4s0 -o tun0 -m состояние --state СВЯЗАННО, УСТАНОВЛЕНО -j ПРИНЯТЬ
iptables -A ВЫВОД -o tun1 -j ПРИНЯТЬ
iptables -A ВЫВОД -o tun0 -j ПРИНЯТЬ
iptables -t nat -A POSTROUTING -s 192.168.4.0/24 -o tun1 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.5.0/24 -o tun0 -j MASQUERADE

## Некоторые выводы:
# Вывод `ip-адрес`:
...
4: tun1: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast состояние НЕИЗВЕСТНО группа по умолчанию qlen 500
    ссылка/нет
    инет 10.100.3.6/24 глобальная область tun1
       valid_lft навсегда
    inet6 fe80::fd55:444a:552a:a454/64 ссылка на стабильную конфиденциальность
       valid_lft навсегда
5: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast состояние НЕИЗВЕСТНО группа по умолчанию qlen 500
    ссылка/нет
    инет 10.100.2.6/24 глобальная область tun0
       valid_lft навсегда
    inet6 fe80::af61:acf1:4e9c:b1a8/64 ссылка на стабильную конфиденциальность
       valid_lft навсегда
...
# Вывод `ip route show`:
0.0.0.0/1 через 10.100.3.1 dev tun1
по умолчанию через 192.168.4.1 dev enp4s0 proto static metric 100
10.100.2.0/24 dev tun0 ссылка на область ядра proto src 10.100.2.5
10.100.3.0/24 dev tun1 ссылка на область ядра proto src 10.100.3.5
128.0.0.0/1 через 10.100.3.1 dev tun1
192.168.4.0/24 dev enp4s0 ссылка на область ядра proto src 192.168.4.223 метрика 100
192.168.5.0/24 через 192.168.4.1 dev enp4s0
# Вывод `ip route show table 110`:
по умолчанию через 10.100.2.1 dev tun0
# Вывод `ip rule`:
0: из всех локальных поисковых систем
32763: со всех на 192.168.5.0/24 поиск основной
32764: со всех на 192.168.4.0/24 поиск основной
32765: из всех поиск fwmark 0x6e 110
32766: из всех основных поисковых запросов
32767: из всех поисковых запросов по умолчанию
# Вывод `iptables -t filter -L -v`:
Цепочка INPUT (политика ACCEPT 30661 пакетов, 3126К байт)
 pkts bytes target prot opt ​​in out source target
Цепочка FORWARD (политика ACCEPT 0 пакетов, 0 байт)
 pkts bytes target prot opt ​​in out source target
2117K 194M ПРИНЯТЬ все -- enp4s0 любое где угодно где угодно
3394K 4191M ПРИНИМАТЬ все -- tun1 enp4s0 везде где угодно состояние СВЯЗАННО,УСТАНОВЛЕНО
    0 0 ПРИНЯТЬ все -- enp4s0 tun1 везде где угодно состояние СВЯЗАННО,УСТАНОВЛЕНО
 1541 133K ПРИНЯТЬ все -- tun0 enp4s0 везде где угодно состояние СВЯЗАННО,УСТАНОВЛЕНО
    0 0 ПРИНЯТЬ все -- enp4s0 tun0 везде где угодно состояние СВЯЗАННО,УСТАНОВЛЕНО
Цепочка OUTPUT (политика ACCEPT 35596 пакетов, 22M байт)
 pkts bytes target prot opt ​​in out source target
 1044 108K ПРИНЯТЬ все -- любой tun1 в любом месте в любом месте
    0 0 ПРИНЯТЬ все -- любой tun0 в любом месте в любом месте
# Вывод `iptables -t nat -L -v`:
Цепочка PREROUTING (политика ACCEPT 208K пакетов, 34M байт)
 pkts bytes target prot opt ​​in out source target
Цепочка INPUT (политика ACCEPT 266 пакетов, 46150 байт)
 pkts bytes target prot opt ​​in out source target
Цепочка POSTROUTING (политика ACCEPT 98 пакетов, 5876 байт)
 pkts bytes target prot opt ​​in out source target
27638 2036K MASQUERADE all -- any tun1 192.168.4.0/24 везде
  347 19186 MASQUERADE all -- any tun0 192.168.5.0/24 везде
Цепочка OUTPUT (политика ACCEPT 95 пакетов, 5636 байт)
 pkts bytes target prot opt ​​in out source target
# Вывод `iptables -t mangle -L PREROUTING -v`:
Цепочка PREROUTING (политика ACCEPT 0 пакетов, 0 байт)
 pkts bytes target prot opt ​​in out source target
 2829 215K MARK all -- enp4s0 любой 192.168.5.0/24 везде MARK set 0x6e

И на обоих серверах OpenVPN (они почти одинаковы, за исключением IP-адресов подсети и интернет-адресов):

## Что я сделал:
# Сначала настройте сервер OpenVPN
# Затем добавляем правила для NAT и FORWARD:
iptables -A ВПЕРЕД -i tun0 -j ПРИНЯТЬ
iptables -A FORWARD -i tun0 -o eth0 -m состояние --state СВЯЗАННО, УСТАНОВЛЕНО -j ПРИНЯТЬ
iptables -A FORWARD -i eth0 -o tun0 -m состояние --state СВЯЗАННО, УСТАНОВЛЕНО -j ПРИНЯТЬ
iptables -A ВЫВОД -o tun0 -j ПРИНЯТЬ
iptables -t nat -A POSTROUTING -s 10.100.2.0/24 -o eth0 -j MASQUERADE

## Некоторые выходы
# Вывод `ip-адрес`:
...
5: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast состояние НЕИЗВЕСТНО группа по умолчанию qlen 500
    ссылка/нет
    инет 10.100.2.1/24 глобальная область tun0
       valid_lft навсегда
    inet6 fe80::c31e:ba42:4cb5:d887/64 ссылка на стабильную конфиденциальность
       valid_lft навсегда
...
# Вывод `iptables -t filter -L -v`:
Цепочка INPUT (политика ACCEPT 16M пакетов, 1026M байт)
 pkts bytes target prot opt ​​in out source target
Цепочка FORWARD (политика ACCEPT 1522K пакетов, 114M байт)
 pkts bytes target prot opt ​​in out source target
 247M 192G ПРИНЯТЬ все -- tun0 любое где угодно где угодно
    0 0 ПРИНЯТЬ все -- tun0 eth0 везде где угодно состояние RELATED, ESTABLISHED
 178M 106G ПРИНИМАТЬ все -- eth0 tun0 везде где угодно состояние СВЯЗАННО, УСТАНОВЛЕНО
    0 0 ПРИНЯТЬ все -- tun0 любой 10.100.2.0/24 везде
Цепочка OUTPUT (политика ACCEPT 16M пакетов, 1047M байт)
 pkts bytes target prot opt ​​in out source target
55959 7717K ПРИНЯТЬ все -- любой tun0 в любом месте в любом месте
# Вывод `iptables -t nat -L -v`:
Цепочка PREROUTING (политика ACCEPT 27M пакетов, 1809M байт)
 pkts bytes target prot opt ​​in out source target
 Цепочка INPUT (политика ACCEPT 11M пакетов, 605M байт)
 pkts bytes target prot opt ​​in out source target
Цепочка OUTPUT (политика ACCEPT 5047 пакетов, 386К байт)
 pkts bytes target prot opt ​​in out source target
Цепочка POSTROUTING (политика ACCEPT 996K пакетов, 83M байт)
 pkts bytes target prot opt ​​in out source target
  16M 1063M MASQUERADE все -- любой eth0 10.100.2.0/24 везде

Теперь компьютеры в 192.168.4.0/24 (например, компьютер B) могут прекрасно подключаться к Интернету через сервер OpenVPN 2.

Но в 192.168.5.0/24 компьютеры не могут разрешать никакие имена хостов.На компьютере А, пинг 8.8.8.8 работает нормально, и трассировка 8.8.8.8 показывает, что он может получить доступ к серверу 8.8.8.8 через сервер OpenVPN 1, но nslookup google.com 8.8.8.8 возвращается Запрос отклонен.

Извините за такой длинный пост, но я действительно не знаю, что делать или что я пропустил. Я не профессионал в сетевых вещах, поэтому любые конкретные предложения и помощь приветствуются. Спасибо!

Рейтинг:0
флаг de

Проблема решена.

Два правила были добавлены в iptables на OPENWRT по умолчанию по необъяснимым причинам:

iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 53
iptables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 53

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

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.