LINUX.ORG.RU
ФорумAdmin

openvpn не видит сеть за клиетом


1

3

Собственно, сабж.. Сервера друг друга видят по openvpn тунелю и по локальным айпишникам. Друг друга пингуют. Из сети клиента видно сеть сервера. Всё пингуется. Из сети сервера не видно сеть клиента, но пингуется сервер клиента (обидно, блин).

Оба сервера как маршрутизаторы.

Конфиги сервера

/etc/network/interfaces

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto eth1
iface eth1 inet dhcp

pre-up iptables-restore < /etc/fire.wall

/etc/fire.wall

# Generated by iptables-save v1.4.4 on Mon Jul  4 14:35:58 2011
*nat
:PREROUTING ACCEPT [65:6684]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -o eth0 -j MASQUERADE 
COMMIT
# Completed on Mon Jul  4 14:35:58 2011
# Generated by iptables-save v1.4.4 on Mon Jul  4 14:35:58 2011
*filter
:INPUT ACCEPT [149:15476]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [80:8683]
COMMIT
# Completed on Mon Jul  4 14:35:58 2011 

/etc/openvpn/openvpn.conf

port 3333
proto tcp
dev tun
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key  # This file should be kept secret

dh /etc/openvpn/keys/dh1024.pem

server 10.1.0.0 255.255.255.0

push "route 192.168.10.0 255.255.255.0"
route 192.168.20.0 255.255.255.0

client-config-dir /etc/openvpn/ccd
client-to-client
keepalive 10 120

comp-lzo

persist-key
persist-tun

status openvpn-status.log
log         /var/log/openvpn-r2.log

verb 3

mute 10

/etc/openvpn/ccd/client

iroute 192.168.20.0 255.255.255.0

Конфиги клиента

/etc/network/interfaces

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 10.0.0.140
netmask 255.255.255.0
gateway 10.0.0.1

auto eth1
iface eth1 inet static
address 192.168.20.1
netmask 255.255.255.0
network 192.168.20.0
broadcast 192.168.20.255
pre-up iptables-restore < /etc/fire.wall

/etc/fire.wall

# Generated by iptables-save v1.4.4 on Tue Jul  5 16:48:03 2011
*nat
:PREROUTING ACCEPT [10:669]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -o eth0 -j MASQUERADE 
COMMIT
# Completed on Tue Jul  5 16:48:03 2011
# Generated by iptables-save v1.4.4 on Tue Jul  5 16:48:03 2011
*filter
:INPUT ACCEPT [12:747]
:FORWARD ACCEPT [70:5506]
:OUTPUT ACCEPT [11:1019]
COMMIT
# Completed on Tue Jul  5 16:48:03 2011

/etc/openvpn/openvpn.conf

client
dev tun
proto tcp
remote xxx.xxx.xxx.xxx 3333
resolv-retry infinite
nobind

persist-key
persist-tun

ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/client.crt
key /etc/openvpn/keys/client.key
ns-cert-type server

comp-lzo

verb 3
log /var/log/openvpn-r2.log

mute 4

Очень хочу побороть openvpn. Помогите, граждане.

Ответ на: комментарий от RMirror

так, а откуда клиент знает какие сети у сервера?

КОроче, раз пакетам ничего не мешает ходить то надо править таблицу маршрутизации.

(В голове крутится волшебное слово ospf :))

true_admin ★★★★★ ()

А самого интересного - вывода «route -n» с клиента и сервера конечно же нет... Гениально...

no-dashi ★★★★★ ()
Ответ на: комментарий от true_admin
push "route 192.168.10.0 255.255.255.0"

Это добавляется в таблицу роутинга клиента при подключении openvpn.

Проясню ситуацию

Головной офис(сервер) eth1 - Интернет. Раздаётся провайдером по DHCP. eth0 - сеть 192.168.10.0

Подразделение (клиент) eth0 - Интернет. Статика, которая даётся провайдером. Сеть 10.0.0.0 eth1 - сеть 192.168.20.0

Тунель openvpn - сеть 10.1.0.0

RMirror ()
Ответ на: комментарий от no-dashi

Не ругайтесь :) route -n завтра выложу, думал может не я один openvpn поднимаю. Если за ночь в манах накопаю траблшут - распишу и отпишусь.

RMirror ()
Ответ на: комментарий от anton_jugatsu

На клиенте же надо маскарадить MASQUERADE на eth1 (локалки) интерфейс, а не на провайдерский.

Кто вам такое сказал? Маскарадить надо на ВНЕШНЕМ интерфейсе - то есть на провайдерском. Весь обмен по внутренним интерфейсам маскараду подвергать нет необходимости, и более того - это вредно.

no-dashi ★★★★★ ()
Ответ на: комментарий от anton_jugatsu

А как тогда изменить src адрес клиента 10.1.0.0/24

А его НЕ НАДО менять. Схема то тривиальная, она во всех man'ах по OpenVPN разжевана. Ключевые слова openvpn будут такие:

На сервере:

[...всякую фигню про сертификаты выкидываем...]
route 192.168.20.0 255.255.255.0 // Маршрут на клиентскую сеть для ОС
route 10.1.0.0 255.255.255.0 // Маршрут на клиентские линки точка-точка для ОС
push "route 10.1.0.0 255.255.255.0" // Клиентские точки линки точка-точка отдаваемый клиенту
push "route 192.168.10.0 255.255.255.0" // Локалка на сервере отдаваемая клиенту
На сервере в CCD клиента:
iroute 192.168.20.0 255.255.255.0 // Внутренняя маршрутизация OpenVPN
На клиенте:
pull // Принять от сервера все что он скажет
И всё. Ничего более делать не надо, всё само заработает.

На сервере после запуска OpenVPN появятся маршруты

10.1.0.0/255.255.255.0 dev tun0
192.168.20.0/255.255.255.0 dev tun0
на клиенте после успешного коннекта появятся маршруты
192.168.10.0/255.255.255.0 dev tun0
10.1.0.0/255.255.255.0 dev tun0
И внутри OpenVPN появится виртуальный маршрут
192.168.20.0/255.255.255.0 via client0

Предположим, добавился еще один клиент с локалкой 192.168.30.0/24? Легко, на сервер добавляем:

[...то что было и еще добавим...]
route 192.168.30.0 255.255.255.0
push "route 192.168.30.0 255.255.255.0"
И в CCD для client2:
iroute 192.168.30.0 255.255.255.0
Чего тут сложного???

no-dashi ★★★★★ ()
Ответ на: комментарий от anton_jugatsu

заморачиваться

Это не «заморачиваться», это задача которая решается в один шаг!

no-dashi ★★★★★ ()
Ответ на: комментарий от no-dashi

Ну и в догонку, можно еще более упростить конфиг сервера, если консолидировать сети:

route 192.168.0.0 255.255.0.0
push "route 192.168.0.0 255.255.0.0"
route 10.1.0.0 255.255.255.0
push "route 10.1.0.0 255.255.255.0"
«Сложно» блин... Задача для ПТУшника.

no-dashi ★★★★★ ()
Ответ на: комментарий от no-dashi

Изменил конфиг на сервере, изменил конфиг на клиенте как порекомендовали.

На сервере

route 192.168.20.0 255.255.255.0 // Маршрут на клиентскую сеть для ОС

route 10.1.0.0 255.255.255.0 // Маршрут на клиентские линки точка-точка для ОС

push «route 10.1.0.0 255.255.255.0» // Клиентские точки линки > точка-точка отдаваемый клиенту

push «route 192.168.10.0 255.255.255.0» // Локалка на сервере отдаваемая клиенту

На клиенте

pull // Принять от сервера все что он скажет

Ребутнул и того и того.

route -n на сервере

Таблица маршутизации ядра протокола IP
Destination Gateway Genmask Flags Metric Ref Use Iface
10.1.0.2        0.0.0.0         255.255.255.255 UH    0      0        0 tun0
192.168.20.0    10.1.0.2        255.255.255.0   UG    0      0        0 tun0
10.1.0.0        10.1.0.2        255.255.255.0   UG    0      0        0 tun0
192.168.10.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0
0.0.0.0         192.168.10.1    0.0.0.0         UG    100    0        0 eth0

route -n на клиенте

Таблица маршутизации ядра протокола IP
Destination Gateway Genmask Flags Metric Ref Use Iface
10.1.0.5        0.0.0.0         255.255.255.255 UH    0      0        0 tun0
192.168.20.0    0.0.0.0         255.255.255.0   U     0      0        0 eth1
10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0
10.1.0.0        10.1.0.5        255.255.255.0   UG    0      0        0 tun0
192.168.10.0    10.1.0.5        255.255.255.0   UG    0      0        0 tun0
0.0.0.0         10.0.0.1        0.0.0.0         UG    100    0        0 eth0

Результат такой же - сеть за клиентом не пингуется. Пинговал и с сервера и с машин за сервером.

Предложите ещё что-то.

RMirror ()
Ответ на: комментарий от RMirror

При tracert 192.168.20.6 (машина за клиентом) с машины за сервером маршрут проходит через сервер openvpn, потом идёт в 10.1.0.6 и пропадает. При этом если сделать tracert 192.168.20.1 (сервер, клиент openvpn) то идёт через сервер openvpn и попадает на 192.168.20.1.

RMirror ()
Ответ на: комментарий от fr_butch

/etc/openvpn/ccd/client

iroute 192.168.20.0 255.255.255.0

маршруты прописаны в конфиге сервера

/etc/openvpn/openvpn.conf

route 10.1.0.0 255.255.255.0
push "route 10.1.0.0 255.255.255.0"

route 192.168.20.0 255.255.255.0
push "route 192.168.10.0 255.255.255.0"

RMirror ()
Ответ на: комментарий от no-dashi

На самом деле я рекомендовал грязный workaround, так на проверить. А за хаутушку спасибо :)

anton_jugatsu ★★★★ ()
Ответ на: комментарий от RMirror
cat /var/log/openvpn-status.log 

на сервере.
овпн точно подцепил настройки?
должно быть что то вроде:

OpenVPN CLIENT LIST
Updated,Wed Jul  6 11:29:03 2011
Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since
msk-bla,x.x.x.x:48125,15045788,113609695,Wed Jul  6 09:49:00 2011
[...]
ROUTING TABLE
Virtual Address,Common Name,Real Address,Last Ref
192.168.12.0/24,msk-bla,x.x.x.x:48125,Wed Jul  6 09:49:01 2011
192.168.16.10,msk-bla,x.x.x.x:48125,Wed Jul  6 11:08:47 2011
[...]
GLOBAL STATS
Max bcast/mcast queue length,0
END
и у клиента соответвующие маршруты через tun0 ифейс (создаются ovpn автоматически через push в конфиге сервера)

и что не еще не менее важно - именование файла в ccd дире должно соответвовать сертификату (указанному CN при создании сертификата, обычно такой же указывают, как и имя файла сертификата. посмотреть можно openssl x509 -text -in cert.crt)

fr_butch ()
Ответ на: комментарий от RMirror

> Результат такой же - сеть за клиентом не пингуется

С руками у тебя проблемы

Потому, что даже traceroute -n не сообразил сделать.

Так вот - если ты его сделаешь - например:
с машины 192.168.10.21
запустишь traceroute -n 192.168.20.21
то у тебя он заткнется на 192.168.10.1

Угадал? Сам знаю, что угадал.

А еще я скажу, что у тебя с машины 192.168.10.21 не пойдет ping 10.1.0.1. А вот с клиента OpenVPN - пойдет. И с машины из локалки клиента - тоже пойдет.

Поэтому берешь ноги в руки, и:
1. идешь на 192.168.10.1 (твой default gateway)
2. прописываешь следующие маршруты:
route add -net 192.168.20.0 mask 255.255.255.0 gw <ip-сервера-в-его-локалке>
route add -net 10.1.0.0 mask 255.255.255.0 gw <ip-сервера-в-его-локалке>
После чего у тебя «вдруг» все начинает работать.

Предложите ещё что-то.


Я не предложу - я скажу: ДЯТЕЛ ТЫ!!! :-)

no-dashi ★★★★★ ()
Ответ на: комментарий от fr_butch

Да нормально у него все с OpenVPN, у него проблема с тем, что его «сервер» не является дефолт гейтвеем для его локалки, а тот кто является дефолт гейтвеем (192.168.10.1), ничего не знает о маршрутах через OpenVPN и о том, что в соответствующие сети можно достучаться черзе OpenVPN-сервер (который например имеет адрес 192.168.10.5)

Работоспособность OpenVPN с данными маршрутами я как бы могу гарантировать (ну если конечно там всякие policy-based routing'и не включены, что вряд ли), и проблема у него в настройках default gateway

no-dashi ★★★★★ ()
Ответ на: комментарий от no-dashi

>Да нормально у него все с OpenVPN

Ну если с VPN все нормально, то если машинка с VPN не является шлюзом в сети, и сделать ее таковой нет возможности, нужно на каждую за VPN добавлять маршрут в соседнюю сеть через машину с VPN. На какие добавишь, - те и увидищь.

Еще, а машинки за VPN они *nix?, в винде всякие там брандмауеры, Касперский АнтиХакер и прочее запрещают доступ к машине из других сетей. Либо выключать, либо настраивать.

lvi ★★★★ ()
Ответ на: комментарий от lvi

Проще объявить машинку с OpenVPN как default gateway и разрешить отдачу ICMP redirect, после чего проблема сама решится.

no-dashi ★★★★★ ()
Ответ на: комментарий от no-dashi

Да ну тебя нафиг. Ёлы-палы. Ты уж если оскорбляешь, так не пиши полезные и правильные вещи, а то совсем хреновая ситуация - и не заигнорить тебя, и уважения особого после оскорблений к тебе нет :)

Спасибо, всё работает.

Сам себе выставил грабли - сам на них и наступил.

На дефолтовом гейте который крутится на Microsoft Forefront TMG добавил статический маршрут.

И вообще, настройкой и развёртыванием web-серверов занимаюсь. А тут сунули, мол, специалиста нету, надо настроить. Как в армии - хоть что сделай, но роди. Почитал маны, но, пардоньте, маршрутизация - это зло. Спасибо за опыт.

зы Вы, всё-таки внимательный специалист :)

RMirror ()
Ответ на: комментарий от RMirror

Лан, ну извини - я не подозревал что ты совсем уж чужой отрасли :-)

no-dashi ★★★★★ ()
Ответ на: комментарий от RMirror

и не заигнорить тебя, и уважения особого после оскорблений к тебе нет

Ну, считай что это репетиция того, что будет когда приедтся работать с нормальными спецами а не политкорректными латерастами :-)

no-dashi ★★★★★ ()
Ответ на: комментарий от RMirror

>На дефолтовом гейте который крутится на Microsoft Forefront TMG добавил статический маршрут.

Ну, да вариантов больше чем предполагал. Обычно, если человек ставит VPN внутри сети, не на гейт, то настройки гейта ему не доступны.

lvi ★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.