Команды маршрутизации OpenVPN в целом

Команды маршрутизации OpenVPN в целом

У меня ситуация, описанная ниже: 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 за помощь.

Связанный контент