У меня есть 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
возвращается Запрос отклонен
.
Извините за такой длинный пост, но я действительно не знаю, что делать или что я пропустил. Я не профессионал в сетевых вещах, поэтому любые конкретные предложения и помощь приветствуются. Спасибо!