
У меня ситуация, описанная ниже: 1. У меня есть 2 сервера OpenVPN (сервер A и сервер B).
2- Клиенты подключаются к каждому серверу через VPN, без прямых локальных сетей.
3- Сервер B подключен как VPN-клиент к серверу A.
4- Сервер B запускает 2 экземпляра OpenVPN
5- Asuume Ноутбук B подключен через VPN к серверу B, мне нужно, чтобы он достиг сервера A (как минимум).
6- Сервер VPN DHCP — 10.8.0.0/24
7- Сервер B VPN DHCP — 172.30.0.0/16
8- Сервер B имеет статический IP 10.8.0.101 (VPN-клиент)
- Проблема в том, что я не могу подключиться к серверу A с ноутбука B. А сервер A не может подключиться к серверу B по IP-адресу VPN-сервера, а не по IP-адресу клиента.
Конфигурация сети выглядит следующим образом:
Конфигурация сервера А
[root@localhost ~]# ifconfig
eth0 inet addr:X.X.X.X Bcast:X.X.X.255 Mask:255.255.255.0
eth0:0 inet addr:X.X.X.X Bcast:X.X.255.255 Mask:255.255.0.0
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.1 P-t-P:10.8.0.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:629066 errors:0 dropped:0 overruns:0 frame:0
TX packets:416252 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:136006302 (129.7 MiB) TX bytes:114377768 (109.0 MiB)
Сервер Б
[root@vps8887 ~]# ifconfig
eth0 inet addr:X.X.X.X Bcast:X.X.X.255 Mask:255.255.255.0
eth0:0 inet addr:X.X.X.X Bcast:X.X.X.255 Mask:255.255.255.0
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:172.30.0.1 P-t-P:172.30.0.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:69 errors:0 dropped:0 overruns:0 frame:0
TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:4140 (4.0 KiB) TX bytes:240 (240.0 b)
tun1 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.101 P-t-P:10.8.0.102 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:34 errors:0 dropped:0 overruns:0 frame:0
TX packets:105 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:2856 (2.7 KiB) TX bytes:8820 (8.6 KiB)
Маршрутизация для сервера A:
[root@localhost ~]# netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
10.8.0.2 * 255.255.255.255 UH 0 0 0 tun0
10.8.0.0 10.8.0.2 255.255.255.0 UG 0 0 0 tun0
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
172.16.0.0 * 255.255.0.0 U 0 0 0 eth0
169.254.0.0 * 255.255.0.0 U 0 0 0 eth0
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
Маршрутизация для сервера B:
[root@vps8887 ~]# netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
10.8.0.102 * 255.255.255.255 UH 0 0 0 tun1
172.30.0.2 * 255.255.255.255 UH 0 0 0 tun0
X.X.X.0 * 255.255.255.0 U 0 0 0 eth0
10.8.0.0 10.8.0.101 255.255.255.0 UG 0 0 0 tun1
X.X.X.0 * 255.255.255.0 U 0 0 0 eth0
172.30.0.0 172.30.0.2 255.255.0.0 UG 0 0 0 tun0
link-local * 255.255.0.0 U 0 0 0 eth0
default X.X.X.1 0.0.0.0 UG 0 0 0 eth0
default X.X.X.1 0.0.0.0 UG 0 0 0 eth0
Проблема возникает, когда я пытаюсь добавить маршрутизацию на сервере A, при добавлении следующей команды:
route add -net 172.30.0.0/16 gw 10.8.0.101
Появляется следующая ошибка:
«SIOCADDRT: Сеть недоступна»
Конфигурация OpenVPN для сервераA порт 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
client-to-client
duplicate-cn
server 10.8.0.0 255.255.255.0
client-config-dir ccd
push "dhcp-option DNS 10.8.0.1"
status openvpn-status.log
keepalive 10 120
comp-lzo
persist-key
persist-tun
crl-verify /etc/openvpn/crl.pem
verb 3
================ Server B Client ccd ================
push "dhcp-option DNS 8.8.8.8"
ifconfig-push 10.8.0.101 10.8.0.102
=====================================================
Конфигурация OpenVPN для сервера B
======================= Server B ( Server Config )========================
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
client-to-client
duplicate-cn
server 172.30.0.0 255.255.0.0
push " route 10.8.0.0 255.255.255.0 "
status openvpn-status.log
keepalive 10 120
comp-lzo
persist-key
persist-tun
verb 3
==============================================================================
================= Server B ( Client Config )==============================
client
dev tun
proto udp
remote serverA 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
route-nopull
route 10.8.0.0 255.255.255.0 10.8.0.101
comp-lzo
verb 5
===============================================================================
И наконец: мне нужно, чтобы эти сайты общались друг с другом.
решение1
Команды маршрутизации OpenVPN в целом
маршрут
Команда route
идет в конфигурацию сервера и сообщает серверу о необходимости добавить маршрут в собственную таблицу маршрутизации ядра. Вам не нужно добавлять route
команду для подсети в server
директиву, но вам нужно добавить route
команду для каждой другой подсети, которую должен обрабатывать сервер. По сути, это сообщит ядру о необходимости отправить эти подсети на сервер openvpn. Например:
# serverA.conf (just a fragment)
server 10.8.0.0 255.255.255.0
...
route 172.30.0.0 255.255.255.0 # Add a route to the kernel routing table
route
Команда iroute
создает маршруты, которые являются «внутренними» для OpenVPN, чтобы сервер OpenVPN знал, какие клиенты отвечают за подсети, как описаноздесьиздесь. Перед тем, как пакеты попадут в таблицу маршрутизации ядра, openvpn расшифровывает их по мере поступления от устройства tun/tap и проверяет их, чтобы понять, что с ними делать. Без команды iroute сервер их не распознает.
# ccd/ServerB.conf
iroute 172.30.0.0
нажмите "маршрут ..."
Команда push
используется и для других целей, но для маршрутизации вам нужны push
маршруты для подсетей к клиентам. Это сообщит клиентам о необходимости изменить свою таблицу маршрутизации ядра для отправки трафика на сервер vpn. Без этого клиенты не будут знать, как получить пакеты из частной подсети 10.8.0.0 в 172.30.0.0. Они должны быть в ccd/client или просто в конфигурации сервера, если она универсальна для всех клиентов.
# ServerA.conf (more of the fragment)
server 10.8.0.0 255.255255.0
...
route 172.30.0.0 255.255.255.0 # add the route to the server's kernel
push "route 172.30.0.0 255.255.255.0" # add the route to the clients
клиент-клиенту
Команда client-to-client
сообщает серверу, что клиентам разрешено общаться друг с другом. Я считаю, что это закомментировано по умолчанию и будет необходимо.
пересылка ip-адресов ядра
Это не конфигурация OpenVPN, и следующее относится только к Linux. Это будет важно для любого, кто использует сервер OpenVPN. На каждом сервере должна быть включена переадресация IP в ядре, напримерэтот. Также убедитесь, что правила брандмауэра не препятствуют пересылке.
Относительно вашей настройки
Похоже, у вас отсутствуют iroute
директивы. Серверу B понадобится запись в его ccd-файле. iroute
Команда сообщает серверу openvpn, какой клиент знает об этой подсети.
# ccd/ServerB
iroute 172.30.0.0 255.255.255.0
РЕДАКЦИЯ: Оглядываясь назад, я замечаю еще одну вещь.
Также, похоже, что сервер A не передает своим клиентам маршрут к серверу B:
# ServerA config
push " route 172.30.0.0 255.255.255.0 "
Я делаю это с двумя серверами, на которых запущен OpenVPN. Вам не придется вручную добавлять маршруты ни к одной из машин. Если вы правильно настроите конфигурации OpenVPN, Сервер B сообщит Серверу A, что он обрабатывает 172.30.0.0 с помощью iroute
. Сервер A сообщит клиентам отправлять 172.30.0.0 через Сервер A с помощью push " route ... "
. И у вас уже есть Сервер B, отправляющий маршрут для 10.8.0.0.
Чтобы проверить, работает ли это, я бы рекомендовал ping
не пытаться добавлять маршруты.
решение2
Я решил это сам. Главное, что "ipforwarding" не был включен на обеих сторонах. Это главная проблема. iroute не очищается для меня, я посмотрел эту статью: OpenVPN и маршрутизация Маршрутизация полностью выполняется OpenVPN. Не требуется ручная маршрутизация. Как показано ниже:
Наконец, спасибо Danger Ginger за помощь.