LINUX.ORG.RU
решено ФорумAdmin

Как добавить default route для openvpn client ?

 , , , ,


0

2

На моей vps работают два openvpn сервера (tun0 и tun1):

root@host:~# ip r
10.8.0.2 dev tun0  proto kernel  scope link  src 10.8.0.1 
10.8.0.2 dev tun1  proto kernel  scope link  src 10.8.0.1 
10.8.0.0/24 via 10.8.0.2 dev tun0 
default dev venet0  scope link 

Запускаю клиент: openvpn --config 1.ovpn

Клиент запускается с оповещением (http://pastie.org/10929341): NOTE: unable to redirect default gateway — Cannot read current default gateway from system

root@host:~# ip r
10.21.0.125 dev tun2  proto kernel  scope link  src 10.21.0.126 
10.8.0.2 dev tun0  proto kernel  scope link  src 10.8.0.1 
10.8.0.2 dev tun1  proto kernel  scope link  src 10.8.0.1 
10.21.0.1 via 10.21.0.125 dev tun2 
10.8.0.0/24 via 10.8.0.2 dev tun0 
default dev venet0  scope link 

Как сделать так, чтобы весь трафик c tun0 и tun1 шел через openvpn клиент (tun2)?

openvpn, если и правит, то основную таблицу марштуризации, а ваша задача:

весь трафик c tun0 и tun1 шел через openvpn клиент (tun2)?

уже policy based routing. Судя по тому, что у вас одинаковые ip-адреса на tun0 и tun1, нужно маркировать входящие с них пакеты, сохранять маркер в CONNMARK, отправлять пакеты по маркеру (″ip rule fwmark″) в отдельную таблицу маршрутизации с default маршрутом в tun2, а для всего из tun2 восстанавливать маркер пакета из маркера соединения и отправлять в разные таблицы маршрутизации, с default-маршрутами в tun0 и tun1.

Эта задача для скриптов, вызываемых из openvpn при поднятии соединения.

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

Одинаковы адреса tun0 и tun1 это не имеет значения. Могу исправить это в openvpn server.conf. Это не критично.

Мне нужно самое простое решение. Думаю, openvz настроена так, что openvpn не может менять таблицу, как он это должен делать по-умолчанию, устанавливая подсеть и стандартный шлюз.

Наверное, тут нужно правило для iptables. Но я не понимаю какое.

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

Есть довольно распространенная практика переопределения default gateway, используемая как раз в VPN, основанная на одном фундаментальном принципе, о котором мало кто помнит:

0.0.0.0         10.21.0.125     128.0.0.0       UG    0      0        0 tun2
128.0.0.0       10.21.0.125     128.0.0.0       UG    0      0        0 tun2

Просто добавьте эту пару маршрутов и эффективным default gateway станет 10.21.0.125, даже не смотря на ваш:

default dev venet0  scope link

Большая маска всегда побеждает. При этом, нелишне прописать и статический маршрут к серверу, куда там tun2 коннектится, через «старый» default gateway.

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

Думаю, openvz настроена так, что openvpn не может менять таблицу,

Подумайте ещё, переведите сообщение openvpn, погуглите, посмотрите исходники openvpn, может что-то приведёт вас к простой истине, что деффект в openvpn, а не в openvz. Раз к tun маршруты прописываются, то default пропишется. Только openvpn хочеть видить маршрут по умолчанию обязательно с указанием ip-адреса шлюза, его категорически не устраивает маршрут вида ″default dev Интерфейс″ без ip-адреса.

сделать перенаправление всего трафика хоста

Вы тут определитесь с задачей. Трафик хоста это то, что он генерирует сам, то есть транспортные пакеты openvpn, внутри которых tun0, tun1, tun2. Вы их хотите завернуть сами в себя? И доступ по ssh это тоже трафик хоста.

Если у вас ip-адреса клиентов, с которых они подключаются к tun0 и tun1 статичный и не изменяются, можете делать, как вам посоветовали, переопределить default и забить маршруты к клиентам/серверу.

Наверное, тут нужно правило для iptables.

iptables не занимается маршрутизацией. Через какой интерфейс пойдёт пакет определяет ″ip rule″ и ″ip route″.

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

Спасибо за ответы.

определитесь с задачей

Объясню подробнее. Мой vps используется как vpn сервер, я качаю торренты, обхожу цензуру с помощью него и др. Сейчас я хочу запустить на этом vps vpn клиент чтобы затем пользоваться double vpn.

tun0 и tun1 это два устройства для двух разных конфигов моего vpn сервера, они не меняются.

Мне нужно соответствующее перенаправление трафика приходящего с устройств tun0 и tun1 в устройство tun2.

iptables не занимается маршрутизацией

https://www.google.nl/search?q=маршрутизация iptables гугл пишет, что iptables занимается маршрутизацией

Просто добавьте эту пару маршрутов и эффективным default gateway станет 10.21.0.125

Вот нечто подобное я описывал debian8 openvpn (комментарий)

Добавил в конфиг строки

push "route 0.0.0.0 128.0.0.0"
push "route 128.0.0.0 128.0.0.0"

В маршрутах от этого ничего не изменяется (openvpn log).

root@host:~# ip r
10.21.0.125 dev tun2  proto kernel  scope link  src 10.21.0.126 
10.8.0.2 dev tun0  proto kernel  scope link  src 10.8.0.1 
10.8.0.2 dev tun1  proto kernel  scope link  src 10.8.0.1 
10.21.0.1 via 10.21.0.125 dev tun2 
10.8.0.0/24 via 10.8.0.2 dev tun0 
default dev venet0  scope link

нелишне прописать и статический маршрут к серверу, куда там tun2 коннектится

у моего vpn провайдера много серверов и в конфигах они указаны в форме доменных имен, то есть маршрут к серверу может быть не статическим и его не прописать универсально один раз.

По-видимому есть два пути решения задачи. Это скрипт route-up для openvpn с вызовами ip route. И iptables правило для перенаправления трафика. Если с помощью iptables можно это сделать.

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

Добавил в конфиг строки
В маршрутах от этого ничего не изменяется (openvpn log).

В какой? Вы хоть тему бы прочитали на что ссылка дана была. Удалите в серверном конфиге redirect-gateway добавьте то что я написал. По вашим логам вы этого не сделали.

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

у моего vpn провайдера много серверов и в конфигах они указаны в форме доменных имен, то есть маршрут к серверу может быть не статическим и его не прописать универсально один раз.

Сорри не дочитал. Так у вас сервер не ваш получается? Если да, то все тоже самое, только поднимаем в скрипте прописанном в конфиге клиента up = /path/script
Или в конфиге клиента
route 0.0.0.0 128.0.0.0
route 128.0.0.0 128.0.0.0

гугл пишет, что iptables занимается маршрутизацией

Он гонит как Троцкий. iptables НЕ занимается маршрутизацией. Для этого есть iproute2, а iptables в помощь.

anc ★★★★★ ()
Последнее исправление: anc (всего исправлений: 1)
Ответ на: комментарий от anc

Изменил конфиг клиента. После запуска openvpn клиента полностью пропадает доступ к vps. Перезагружаю сервер через веб интерфейс, чтобы вернуть доступ.

Здесь вывод openvpn --config 1.ovpn.

Это таблицы при запущенном vpn клиенте.

root@host:~# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
10.21.0.125     0.0.0.0         255.255.255.255 UH        0 0          0 tun2
10.8.0.2        0.0.0.0         255.255.255.255 UH        0 0          0 tun0
10.8.0.2        0.0.0.0         255.255.255.255 UH        0 0          0 tun1
10.21.0.1       10.21.0.125     255.255.255.255 UGH       0 0          0 tun2
10.8.0.0        10.8.0.2        255.255.255.0   UG        0 0          0 tun0
0.0.0.0         10.21.0.125     128.0.0.0       UG        0 0          0 tun2
128.0.0.0       10.21.0.125     128.0.0.0       UG        0 0          0 tun2
0.0.0.0         0.0.0.0         0.0.0.0         U         0 0          0 venet0

root@host:~# ip r
10.21.0.125 dev tun2  proto kernel  scope link  src 10.21.0.126
10.8.0.2 dev tun0  proto kernel  scope link  src 10.8.0.1
10.8.0.2 dev tun1  proto kernel  scope link  src 10.8.0.1
10.21.0.1 via 10.21.0.125 dev tun2
10.8.0.0/24 via 10.8.0.2 dev tun0
0.0.0.0/1 via 10.21.0.125 dev tun2
128.0.0.0/1 via 10.21.0.125 dev tun2
default dev venet0  scope link
Affably ()
Ответ на: комментарий от Affably

После запуска openvpn клиента полностью пропадает доступ к vps.

Да мне вообще не понятен момент как вы вообще с ней работаете при учете того что defroute нэма ?

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

Так есть же defroute. У меня на моих 2-х ноутбуках с Arch точно так default gateway без ip выводится в таблице по `ip r`.

Только openvpn хочеть видить маршрут по умолчанию обязательно с указанием ip-адреса шлюза, его категорически не устраивает маршрут вида ″default dev Интерфейс″ без ip-адреса.

На них openvpn работает как следует.

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

Хм, не видел такого. Выглядит весьма странно. Думал поскрывали то что не сочли нужным, а все остальное у вас настроено включая iptroute2+iptables что бы доступ при изменении defroute не пропадал.
Можно пойти другим путем. Поищите в поиске Double VPN, этот как раз для вас. Например вот эта тема Double VPN.

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

Общий смысл такой, Первый вариант, iproute2+iptables при обращении к внешнему ip соединение маркируется и все пакеты из этого соединения направляем тем же маршрутом, все остальное идет через defroute.
Второй вариант, добавляем отдельную таблицу ip route add default dev IF-tun table MyTable и дальше создаем правила по которым отправляем пакеты через эту таблицу плюс маскарадим.

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

Спсибо за помощь anc, mky, rubic.

Использовал вот такое решение:

echo '150 vpn.out' >> /etc/iproute2/rt_tables

ip rule add from 10.8.0.0/24 table vpn.out 
ip route add default dev tun2 table vpn.out

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o tun2 -j MASQUERADE
Affably ()
Ответ на: комментарий от Affably

Здравствуйте. Подскажите как разрешить одной сети tun1 ходить в сеть tun0. Тоесть у меня на tun0 сервер а на tun1 клиент который подключён к другому серверу. Как через tun0 открывать сайты которые доступны в tun1 .например рутрекер.

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