Вопрос или проблема
Привет, ребята. Я уже почти целый день пытаюсь разобраться с этой проблемой, но мои ограниченные знания в области сетевых технологий мешают дальнейшему прогрессу.
Моя основная сеть управляется маршрутизатором openWRT с адресом 192.168.1.1, на котором также находится мой сервер в той же подсети. Сервер работает в контейнере openVPN, который используется для маршрутизации некоторых контейнеров для файлового обмена через коммерческую VPN. Контейнер openVPN использует 2 виртуальных сетевых устройства (мосты). Один из них подключается к основному маршрутизатору по адресу 192.168.1.1, а другой (192.168.50.1) используется для соединения с контейнерами для файлового обмена и маршрутизации их трафика через VPN. В текущем состоянии я могу получить доступ к контейнеру openVPN из основной сети, но у меня нет доступа к другим виртуальным машинам. Другие виртуальные машины маршрутизируются через VPN и могут взаимодействовать друг с другом. Виртуальная машина OpenVPN работает с DHCP для второго подсети.
Я уже пробовал множество вещей, но я застрял, и все, что я сделал до сих пор, основывалось на нескольких руководствах, которые я нашел в интернете.
Вот вся моя конфигурация и информация: маршрутизатор OpenWRT:
config interface 'loopback'
option device 'lo'
option proto 'static'
option ipaddr '127.0.0.1'
option netmask '255.0.0.0'
config globals 'globals'
option ula_prefix 'fdb0:92f6:e692::/48'
option packet_steering '1'
config device
option name 'br-lan'
option type 'bridge'
list ports 'lan1'
list ports 'lan2'
list ports 'lan3'
config interface 'lan'
option device 'br-lan'
option proto 'static'
option ipaddr '192.168.1.1'
option netmask '255.255.255.0'
option ip6assign '60'
config interface 'wan'
option device 'wan'
option proto 'dhcp'
config interface 'wan6'
option device 'wan'
option proto 'dhcpv6'
config route
option interface 'lan'
option target '10.20.0.0/24'
option gateway '192.168.1.157'
config device
option type 'bridge'
option name 'Nibelungen'
option bridge_empty '1'
list ports 'eth0'
list ports 'lan3'
list ports 'Nibelungen.1'
list ports 'Nibelungen.2'
list ports 'Nibelungen.3'
config bridge-vlan
option device 'Nibelungen'
option vlan '1'
list ports 'Nibelungen.1:t'
config bridge-vlan
option device 'Nibelungen'
option vlan '2'
list ports 'Nibelungen.2:t'
config bridge-vlan
option device 'Nibelungen'
option vlan '3'
list ports 'Nibelungen.3:t'
config route
option interface 'lan'
option target '192.168.50.0/24'
config interface 'OVPN_VLAN'
option proto 'static'
option device 'Nibelungen'
option ipaddr '192.168.50.0'
option netmask '255.255.255.0'
option gateway '192.168.50.1'
option broadcast '192.168.50.255'
list dns '192.168.1.1'
config route
option interface 'lan'
option target '192.168.50.129/24'
option gateway '192.168.50.1'
config route
option interface 'OVPN_VLAN'
option target '192.168.1.0/24'
брандмауэр:
Это не обычная конфигурация - я просто выставил все на "включить" для устранения неполадок!
config defaults
option input 'ACCEPT'
option output 'ACCEPT'
option forward 'ACCEPT'
option synflood_protect '1'
config zone
option name 'lan'
option input 'ACCEPT'
option output 'ACCEPT'
option forward 'ACCEPT'
list network 'lan'
config zone
option name 'wan'
option input 'ACCEPT'
option output 'ACCEPT'
option forward 'ACCEPT'
option masq '1'
list network 'wan'
list network 'wan6'
config forwarding
option src 'lan'
option dest 'wan'
config rule
option name 'Allow-DHCP-Renew'
option src 'wan'
option proto 'udp'
option dest_port '68'
option target 'ACCEPT'
option family 'ipv4'
config rule
option name 'Allow-Ping'
option src 'wan'
option proto 'icmp'
option icmp_type 'echo-request'
option family 'ipv4'
option target 'ACCEPT'
config rule
option name 'Allow-IGMP'
option src 'wan'
option proto 'igmp'
option family 'ipv4'
option target 'ACCEPT'
config rule
option name 'Allow-DHCPv6'
option src 'wan'
option proto 'udp'
option dest_port '546'
option family 'ipv6'
option target 'ACCEPT'
config rule
option name 'Allow-MLD'
option src 'wan'
option proto 'icmp'
option src_ip 'fe80::/10'
list icmp_type '130/0'
list icmp_type '131/0'
list icmp_type '132/0'
list icmp_type '143/0'
option family 'ipv6'
option target 'ACCEPT'
config rule
option name 'Allow-ICMPv6-Input'
option src 'wan'
option proto 'icmp'
list icmp_type 'echo-request'
list icmp_type 'echo-reply'
list icmp_type 'destination-unreachable'
list icmp_type 'packet-too-big'
list icmp_type 'time-exceeded'
list icmp_type 'bad-header'
list icmp_type 'unknown-header-type'
list icmp_type 'router-solicitation'
list icmp_type 'neighbour-solicitation'
list icmp_type 'router-advertisement'
list icmp_type 'neighbour-advertisement'
option limit '1000/sec'
option family 'ipv6'
option target 'ACCEPT'
config rule
option name 'Allow-ICMPv6-Forward'
option src 'wan'
option dest '*'
option proto 'icmp'
list icmp_type 'echo-request'
list icmp_type 'echo-reply'
list icmp_type 'destination-unreachable'
list icmp_type 'packet-too-big'
list icmp_type 'time-exceeded'
list icmp_type 'bad-header'
list icmp_type 'unknown-header-type'
option limit '1000/sec'
option family 'ipv6'
option target 'ACCEPT'
config rule
option name 'Allow-IPSec-ESP'
option src 'wan'
option dest 'lan'
option proto 'esp'
option target 'ACCEPT'
config rule
option name 'Allow-ISAKMP'
option src 'wan'
option dest 'lan'
option dest_port '500'
option proto 'udp'
option target 'ACCEPT'
config include 'pbr'
option fw4_compatible '1'
option type 'script'
option path '/usr/share/pbr/firewall.include'
config zone
option name 'OVPN_VLAN'
option input 'ACCEPT'
option output 'ACCEPT'
option forward 'ACCEPT'
list network 'OVPN_VLAN'
config forwarding
option src 'OVPN_VLAN'
option dest 'lan'
config forwarding
option src 'lan'
option dest 'OVPN_VLAN'
config forwarding
option src 'OVPN_VLAN'
option dest 'wan'
config forwarding
option src 'wan'
option dest 'OVPN_VLAN'
config redirect
option dest 'OVPN_VLAN'
option target 'DNAT'
option name 'tranvlan'
option src 'lan'
option src_dport '9091'
option dest_port '9091'
OpenVPN VM:
Клиент VPN:
client
dev tap0
proto udp
remote xxx
resolv-retry infinite
remote-random
nobind
tun-mtu 1500
tun-mtu-extra 32
mssfix 1450
persist-key
persist-tun
ping 15
ping-restart 0
ping-timer-rem
reneg-sec 0
remote-cert-tls server
auth-user-pass xxx
#comp-lzo
verb 3
pull
fast-io
cipher AES-256-CBC
auth SHA512
<ca>
-----BEGIN CERTIFICATE-----
xxx
-----END CERTIFICATE-----
</ca>
key-direction 1
<tls-auth>
#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
xxx
-----END OpenVPN Static key V1-----
</tls-auth>
iptables:
Я совершенно не представляю, что все эти вещи действительно делают, что здесь отсутствует, так это то, что я пробовал несколько маршрутов к/от основного маршрутизатора
root@OpenVPN ~/ubus# iptables -t nat
iptables v1.8.9 (legacy): no command specified
Попробуйте `iptables -h' или 'iptables --help' для получения дополнительной информации.
root@OpenVPN ~/ubus# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- anywhere anywhere
MASQUERADE all -- anywhere anywhere
root@OpenVPN ~/ubus# iptables -L
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT icmp -- anywhere anywhere icmp echo-request
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere tcp dpt:http
ACCEPT tcp -- anywhere anywhere tcp dpt:https
ACCEPT tcp -- anywhere anywhere tcp dpt:12320
ACCEPT tcp -- anywhere anywhere tcp dpt:9091
ACCEPT tcp -- anywhere anywhere tcp dpt:12321
ACCEPT udp -- anywhere anywhere udp dpt:openvpn
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 192.168.50.0/24 anywhere ctstate NEW
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
DHCP:
# dhcpd.conf
#
# Пример конфигурационного файла для ISC dhcpd
#
authoritative;
subnet 192.168.50.0 netmask 255.255.255.0 {
range 192.168.50.128 192.168.50.254;
option routers 192.168.50.1;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.50.255;
option domain-name-servers 8.8.8.8;
default-lease-time 86400;
max-lease-time 259200;
}
# Если этот DHCP сервер является официальным сервером DHCP для локальной
# сети, директива authoritative должна быть раскомментирована.
#authoritative;
# Используйте это, чтобы отправить сообщения журнала dhcp в другой файл журнала (вам также нужно
# отредактировать syslog.conf, чтобы завершить переадресацию).
#log-facility local7;
# Никакая служба не будет предоставлена в этой подсети, но объявление помогает серверу
# DHCP понять топологию сети.
#subnet 10.152.187.0 netmask 255.255.255.0 {
#}
# Это очень базовое объявление подсети.
#subnet 10.254.239.0 netmask 255.255.255.224 {
# range 10.254.239.10 10.254.239.20;
# option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;
#}
# Это объявление позволяет клиентам BOOTP получать динамические адреса,
# что мы на самом деле не рекомендуем.
#subnet 10.254.239.32 netmask 255.255.255.224 {
# range dynamic-bootp 10.254.239.40 10.254.239.60;
# option broadcast-address 10.254.239.31;
# option routers rtr-239-32-1.example.org;
#}
# Немного другая конфигурация для внутренней подсети.
#subnet 10.5.5.0 netmask 255.255.255.224 {
# range 10.5.5.26 10.5.5.30;
# option domain-name-servers ns1.internal.example.org;
# option domain-name "internal.example.org";
# option routers 10.5.5.1;
# option broadcast-address 10.5.5.31;
# default-lease-time 600;
# max-lease-time 7200;
#}
# Хосты, которым требуются специальные параметры конфигурации, могут быть перечислены в
# операторе host. Если адрес не указан, адрес будет
# назначен динамически (если это возможно), но информация, специфичная для хоста,
# все равно будет поступать из объявления хоста.
#host passacaglia {
# hardware ethernet 0:0:c0:5d:bd:95;
# filename "vmunix.passacaglia";
# server-name "toccata.example.com";
#}
# Фиксированные IP-адреса также могут быть указаны для хостов. Эти адреса
# не должны также быть перечислены как доступные для динамического назначения.
# Хосты, для которых указаны фиксированные IP-адреса, могут загружаться с использованием
# BOOTP или DHCP. Хосты, для которых не указан фиксированный адрес, могут загружаться только
# с помощью DHCP, если в подсети
# есть диапазон, к которому подключен клиент BOOTP, у которого установлен флаг dynamic-bootp.
#host fantasia {
# hardware ethernet 08:00:07:26:c0:a5;
# fixed-address fantasia.example.com;
#}
# Вы можете объявить класс клиентов и затем произвести распределение адресов
# на его основе. Пример ниже показывает случай, когда все клиенты
# в определенном классе получают адреса в подсети 10.17.224/24, а все
# остальные клиенты получают адреса в подсети 10.0.29/24.
#class "foo" {
# match if substring (option vendor-class-identifier, 0, 4) = "SUNW";
#}
#shared-network 224-29 {
# subnet 10.17.224.0 netmask 255.255.255.0 {
# option routers rtr-224.example.org;
# }
# subnet 10.0.29.0 netmask 255.255.255.0 {
# option routers rtr-29.example.org;
# }
# pool {
# allow members of "foo";
# range 10.17.224.10 10.17.224.250;
# }
# pool {
# deny members of "foo";
# range 10.0.29.10 10.0.29.230;
# }
#}
sysctl:
#
# /etc/sysctl.conf - Конфигурационный файл для настройки системных переменных
# Смотрите /etc/sysctl.d/ для дополнительных системных переменных.
# Смотрите sysctl.conf (5) для получения информации.
#
net.ipv4.conf.all.forwarding = 1
#kernel.domainname = example.com
# Раскомментируйте следующее, чтобы остановить низкоуровневые сообщения в консоли
kernel.printk = 1 4 1 7
###################################################################
# Функции, ранее найденные в netbase
#
# Раскомментируйте следующие две строки, чтобы включить защиту от подмены (фильтр обратного пути)
# Включите проверку источника адреса на всех интерфейсах, чтобы
# предотвратить некоторые атаки подмены
#net.ipv4.conf.default.rp_filter=1
#net.ipv4.conf.all.rp_filter=1
# Раскомментируйте следующую строку, чтобы включить куки SYN TCP/IP
# Смотрите http://lwn.net/Articles/277146/
# Замечание: это может повлиять и на TCP-сессии IPv6
#net.ipv4.tcp_syncookies=1
# Раскомментируйте следующую строку, чтобы включить пересылку пакетов для IPv4
net.ipv4.ip_forward = 1
# Раскомментируйте следующую строку, чтобы включить пересылку пакетов для IPv6
# Включение этой опции отключает автоматическую настройку адресов без состояния
# на основе объявлений маршрутизаторов для этого хоста
#net.ipv6.conf.all.forwarding=1
###################################################################
# Дополнительные настройки - эти настройки могут улучшить безопасность сети
# хоста и предотвратить некоторые сетевые атаки,
# включая атаки подмены и атаки "человек посередине" через
# перенаправление. Тем не менее, некоторые сетевые среды требуют, чтобы эти
# настройки были отключены, поэтому их следует просмотреть и включить по мере необходимости.
#
# Не принимать ICMP перенаправления (предотвращение MITM атак)
#net.ipv4.conf.all.accept_redirects = 0
#net.ipv6.conf.all.accept_redirects = 0
# _или_
# Принимать ICMP перенаправления только для шлюзов, перечисленных в нашем списке
# шлюзов по умолчанию (включено по умолчанию)
# net.ipv4.conf.all.secure_redirects = 1
#
# Не отправлять ICMP перенаправления (мы не являемся маршрутизатором)
#net.ipv4.conf.all.send_redirects = 0
#
# Не принимать пакеты с маршрутом источника IP (мы не являемся маршрутизатором)
#net.ipv4.conf.all.accept_source_route = 0
#net.ipv6.conf.all.accept_source_route = 0
#
# Логировать Марсианские Пакеты
#net.ipv4.conf.all.log_martians = 1
#
###################################################################
# Магический системный запрос Клавиша
# 0=отключить, 1=включить все, >1 битовая маска функций sysrq
# Смотрите https://www.kernel.org/doc/html/latest/admin-guide/sysrq.html
# для других значений
#kernel.sysrq=438
# Отключить метки времени TCP
net.ipv4.tcp_timestamps = 0
#
“ip addr”
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
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: eth0@if177: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether bc:24:11:5f:30:d2 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 192.168.1.118/24 brd 192.168.1.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::be24:11ff:fe5f:30d2/64 scope link
valid_lft forever preferred_lft forever
3: eth1@if178: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether bc:24:11:a7:51:f9 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 192.168.50.1/24 brd 192.168.50.255 scope global eth1
valid_lft forever preferred_lft forever
inet6 fe80::be24:11ff:fea7:51f9/64 scope link
valid_lft forever preferred_lft forever
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 500
link/none
inet 10.8.8.12/24 scope global tun0
valid_lft forever preferred_lft forever
inet6 fe80::acfc:c999:d938:5b72/64 scope link stable-privacy
valid_lft forever preferred_lft forever
“route”
root@OpenVPN ~# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.8.8.1 128.0.0.0 UG 0 0 0 tun0
default OpenWrt.lan 0.0.0.0 UG 0 0 0 eth0
10.8.8.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0
128.0.0.0 10.8.8.1 128.0.0.0 UG 0 0 0 tun0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.50.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
vpn-pub-address OpenWrt.lan 255.255.255.255 UGH 0 0 0 eth0
“ip addr” и “route” с одной из других ВМ
root@transmission:~# ip addr
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
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: esn0@if147: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether bc:24:11:75:63:21 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 192.168.50.129/24 brd 192.168.50.255 scope global esn0
valid_lft forever preferred_lft forever
inet6 fe80::be24:11ff:fe75:6321/64 scope link
valid_lft forever preferred_lft forever
route:
root@transmission:~# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.50.1 0.0.0.0 UG 0 0 0 esn0
192.168.50.0 0.0.0.0 255.255.255.0 U 0 0 0 esn0
вставьте описание изображения здесь
Хотя это не будет идеальным, в данный момент я был бы рад, если бы был способ позволить мне (и другим ВМ) получить доступ к веб-интерфейсам машин.
Я так растерян, что с удовольствием куплю вам кофе, если вы сможете помочь мне это настроить!!
Ответ или решение
Ваша проблема заключается в том, что вы не можете получить доступ к виртуальным машинам (VM) в подсети 192.168.50.0/24 из вашей основной сети 192.168.1.0/24. Ниже приведен шаг за шагом процесс, который поможет решить эту проблему.
1. Проверка конфигурации маршрутизации OpenWRT
Сначала нужно убедиться, что маршрутизация между двумя подсетями настроена правильно. Вы уже добавили маршруты для обеих подсетей в конфигурацию маршрутизации на OpenWRT, что правильно. Проверьте, что маршруты выглядят следующим образом:
config route
option interface 'lan'
option target '192.168.50.0/24'
option gateway '192.168.50.1'
config route
option interface 'OVPN_VLAN'
option target '192.168.1.0/24'
Эти маршруты обеспечивают двунаправленную маршрутизацию, что хорошо для вашего случая.
2. Настройка конфигурации брандмауэра
Убедитесь, что ваш брандмауэр на OpenWRT позволяет проходить трафику между двумя подсетями. Вы уже установили правила на «ACCEPT» в разделе конфигурации брандмауэра, поэтому это хорошо. Однако убедитесь, что направлению разрешен трафик:
config forwarding
option src 'OVPN_VLAN'
option dest 'lan'
config forwarding
option src 'lan'
option dest 'OVPN_VLAN'
Это позволит трафику проходить в обе стороны.
3. Настройка DHCP и IP-адресов на VMs
Убедитесь, что на виртуальных машинах в подсети 192.168.50.0/24 правильные настройки шлюза. Вы уже указали:
option routers 192.168.50.1;
Убедитесь, что на каждой VM правильно настроены IP-адреса и шлюз. Это можно сделать, прописав в конфигурации VM такой IP-адрес, как, например, 192.168.50.129, и убедившись, что шлюз при этом равен 192.168.50.1.
4. Проверка политик iptables
На вашей OpenVPN VM проверьте правила iptables. У вас должно быть следующее правило в цепочке FORWARD:
ACCEPT all -- 192.168.50.0/24 anywhere ctstate NEW
Это позволит новым (NEW) соединениям из подсети 192.168.50.0 попасть на другие сети, в том числе из 192.168.1.0.
5. Проверка доступа из основной сети
Попробуйте выполнить следующие команды из основной сети (192.168.1.0/24), чтобы убедиться, что вы можете пинговать виртуальные машины:
ping 192.168.50.129
Если пинг проходит, это значит, что маршрутизация работает правильно. Если не проходит, убедитесь, что в брандмауэре VM не заблокированы ICMP пакеты.
6. Доступ к веб-интерфейсам VM
Если ваш конечный вопрос — доступ к веб-интерфейсам на виртуальных машинах, сначала убедитесь, что эти сервисы (например, веб-серверы) запущены и работают на нужных портах. Используйте такие команды, как:
netstat -tuln # для проверки открытых портов
Кроме того, проверьте, открыт ли соответствующий порт в брандмауэре VM. Например, если у вас есть веб-сервер на порту 80, убедитесь, что этот порт открыт в iptables.
Заключение
Следуя этим шагам, вы должны быть в состоянии настроить доступ между вашей основной сетью и виртуальными машинами, работающими в другой подсети. Если после выполнения всех шагов проблема останется, попробуйте перезагрузить сетевые интерфейсы и маршрутизатор, чтобы убедиться в применении всех новых изменений конфигурации.