KorP
@KorP
Кратко о себе

OpenVPN и роутинг между сетями

Есть 2 сервера, соединённые между собой через OpenVPN. Задача — сделать доступными ресурсы внутренних сетей этих сервером между собой.
Сервер #1 (который так же является сервером OpenVPN):
eth0 — 192.168.0.1
eth1 — external interface
tap0 — 10.8.0.1

Конфиг OpenVPN (лишнее вырезано):
#Порт
port 1194
#Протокол
proto udp
#Тип интерфейса
dev tap0
#Режим работы сервера
mode server
#Серверу назначается первый адрес из первой подсети
ifconfig 10.8.0.1 255.255.255.0
#Клиентам
ifconfig-pool 10.8.0.10 10.8.0.100
#Системе объявляется маршрут на всю OpenVPN-сеть
route 10.8.0.0 255.255.255.0
#Передаётся маршрут на всю OpenVPN-сеть клиентам
push «route 192.168.0.0 255.255.255.0»
#Шлюз длы вышеуказанных маршрутов
push «route-gateway 10.8.0.1»

Сервер #2
eth0 — external interface
eth1 — 192.168.1.1
tap0 — 10.8.0.11

Конфиг OpenVPN (лишнее вырезано):
#Режим работы
client
#Тип интерфейса
dev tap
#Протокол
proto udp
#Адресс сервера и порт
remote ip 1194
#принимать команды push от сервера.то есть позволять переконфигурировать клиента
pull

Сейчас всё подключается и работает и сервера друг друга пингуют (по 192.168.*.1), а вот в сеть дальше уже как то не алло. С сервера 2 пингую машинку
192.168.1.1# ping 192.168.0.254
PING 192.168.0.254 (192.168.0.254) 56(84) bytes of data.
^C
— 192.168.0.254 ping statistics — 5 packets transmitted, 0 received, 100% packet loss, time 4548ms
а сервере 1 запускаю tcpdump:
192.168.0.1# tcpdump -i tap0 icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tap0, link-type EN10MB (Ethernet), capture size 65535 bytes
12:19:42.862971 IP 10.8.0.11 > 192.168.0.254: ICMP echo request, id 20265, seq 1, length 64
12:19:43.862806 IP 10.8.0.11 > 192.168.0.254: ICMP echo request, id 20265, seq 2, length 64
12:19:44.862721 IP 10.8.0.11 > 192.168.0.254: ICMP echo request, id 20265, seq 3, length 64
12:19:45.862667 IP 10.8.0.11 > 192.168.0.254: ICMP echo request, id 20265, seq 4, length 64
12:19:46.862640 IP 10.8.0.11 > 192.168.0.254: ICMP echo request, id 20265, seq 5, length 64

в iptables только одно правило:
iptables -A FORWARD -p ALL -s 192.168.1.0/24 -d 192.168.0.0/24 -j ACCEPT

Вопрос №1: что я не докрутил?
Вопрос №2: что я не докрутил что у при пинге с 1-го сервера машин за вторым сервером tcpdump вообще молчит?
  • Вопрос задан
  • 67666 просмотров
Пригласить эксперта
Ответы на вопрос 7
cjey
@cjey
возможно я был невнимателен, но мне кажется:
1) не хватает правила iptables -A FORWARD -p ALL -s 192.168.0.0/24 -d 192.168.1.0/24 -j ACCEPT
2) нужно добавить маршруты на серверах
например на 2-м сервере нужно добавить маршрут route add -host 192.168.0.254 gw 10.8.0.1 (синтаксис не проверял, но общая идея такая.). Ну или сразу маршрут для всей подсети 192.168.0.0/24
3) После того как заработает пинг от серверов в дальнюю подсеть возможно нужно будет добавлять маршруты на клиентских машинах.
Ответ написан
@Manitou
Вам нужно почитать документацию на сайте openvpn или man openvpn, по поводу опции --iroute, можно так же прочесть о --client-config-dir. То есть нужно указание и route и iroute, если коротко, то вот:

The reason why two routes are needed is that the --route directive routes the packet from the kernel to OpenVPN. Once in OpenVPN, the --iroute directive routes to the specific client.
Ответ написан
Комментировать
diger_74
@diger_74
На беглый взгляд не хватает client-to-client в конфиге сервера, чтобы видны были подсети за ними.

А вообще ваш сценарий достаточно подробно описан тут.
Ответ написан
Комментировать
g00dtlt
@g00dtlt
Если не хотите заморачиваться c линуксом, поставьте routeros
Ответ написан
KorP
@KorP Автор вопроса
Кратко о себе
1. А чего конкретно не хватает?
2. Маршруты все есть
192.168.0.1# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 217.70.27.145 0.0.0.0 UG 3 0 0 eth1
10.8.0.0 0.0.0.0 255.255.255.0 U 0 0 0 tap0
127.0.0.0 127.0.0.1 255.0.0.0 UG 0 0 0 lo
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.1.1 10.8.0.1 255.255.255.255 UGH 0 0 0 tap0
217.70.27.144 0.0.0.0 255.255.255.240 U 3 0 0 eth1

192.168.1.1# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.8.0.0 0.0.0.0 255.255.255.0 U 0 0 0 tap0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
10.43.148.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.0.0 10.8.0.1 255.255.255.0 UG 0 0 0 tap0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 eth1
0.0.0.0 10.43.148.1 0.0.0.0 UG 0 0 0 eth0

3. Ну не в ручную же все маршруты прописывать то!?
Ответ написан
AlekseyPolyakov
@AlekseyPolyakov
Вам нужно задействовать функцию ccd на сервере, который выступает OpenVPN сервером. Создать конфигурационный файл (имя ключа без расширения) на клиенский ключ второго сервера.В файле сделать push «route z.z.z.z» той подсети, с которой должен общаться клиет.

route в конфигурационном файле сервера означает, что клиент будет знать куда направить пакет, а по ccd конфигурационному файду клиента, сервер будет знать куда отдать ответ.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы