LINUX.ORG.RU

Два шлюза: интернет + openvpn на одной машине

 , , ,


0

1

Здравствуйте!

Задача следующая: настроить сервер-шлюз для выхода в интернет напрямую и через openvpn.

На машине имеется:

#uname -a

Linux Ub-Server 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:18:00 UTC 2015 i686 i686 i686 GNU/Linux

#ifconfig -a

eth1 Link encap:Ethernet HWaddr 00:14:85:20:e7:24 inet addr:192.168.0.10 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::214:85ff:fe20:e724/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:27497 errors:0 dropped:2 overruns:0 frame:0 TX packets:55478 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:2415091 (2.4 MB) TX bytes:78819982 (78.8 MB)

eth1:0 Link encap:Ethernet HWaddr 00:14:85:20:e7:24 inet addr:192.168.0.11 Bcast:192.168.0.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

lo Link encap:Локальная петля (Loopback) inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:220 errors:0 dropped:0 overruns:0 frame:0 TX packets:220 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:60252 (60.2 KB) TX bytes:60252 (60.2 KB)

ppp0 Link encap:Протокол PPP (Point-to-Point Protocol) inet addr:10.111.108.15 P-t-P:10.64.64.64 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:2217 errors:0 dropped:0 overruns:0 frame:0 TX packets:1434 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:3 RX bytes:2159084 (2.1 MB) TX bytes:235499 (235.4 KB)

wwan0 Link encap:Ethernet HWaddr 00:1e:10:1f:00:00 BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

Т.е. два рабочих интерфейса - eth1(локальная сеть) и ppp0(свисток с оператором Скартел - через него и ходим в сеть). Стоит упомянуть одну из причин использования OpenVPN. На выбранном тарифе Скартел режет торренты - потому, приходится прятать трафик.

На машине запущен клиент openvpn, через который и планируется ходить всем из локальной сети. Сервер OpenVPN в сети Интернет свой - можно поправить конфиги.

Что реализовано:
1. Настроен доступ в сеть интернет через ppp;
2. Настроен форвардинг в локальной сети;
3. Клиент openvpn также настроен. Как известно, он переопределяет маршрут по умолчанию и тем самым просто выйти в сеть интернет не удается - все идет через vpn.

Собственно, главная проблема - как реализовать возможность одновременного доступа в сеть. Были мысли использовать proxy (например socks) для шифрованного трафика и уже только его заворачивать в openvpn, но реализовать не удалось.

***** Дополнение № 1
На клиенте ovpn все маршруты прописываются вручную, т.е. redirect-gateway - отключена.

Адреса, куда клиенты будут «ходить» через ovpn заранее не известны. Например, торрент, запрещенные сайты в РФ.

Мое представление как должно работать: по умолчанию весь трафик идет через isp. Если нужно, то в программе клиента указывается прокси, и уже трафик который пойдет через прокси нужно завернуть в opvn.


Как известно, он переопределяет маршрут по умолчанию и тем самым просто выйти в сеть интернет не удается - все идет через vpn.

Собственно, главная проблема - как реализовать возможность одновременного доступа в сеть.

Т.е. как? Одновременно роутить в OpenVPN и в PPP?

Я думаю, Вам нужно ознакомиться с LARTC.

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

Два шлюза одновременно не могут работать.

Что за чушь?

zooooo ()

Сервер OpenVPN в сети Интернет свой - можно поправить конфиги.

Убрать redirect-gateway из конфига. На машине с клиентом, настроить роутинг для тех адресов, на которые ходить через ovpn.

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

Если правильно понял, то на сервере создать 2 vlan интерфейса:
1. для доступа через isp;
2. для доступа через сервер ovpn.

Исходя из этого, надо чтобы клиентская машина имела ip из подсети соответствующего vlan. Т.е. требуется ручками менять ip клиента. И далее уже через iproute2 направить трафик по необходимым маршрутам.

Если все верно, то можно сразу в правилах маршрутизации разбить на 2 диапазона адресов и не создавать vlan.

Поправьте если не прав.

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

Зачем vlan для такой простой задачи?
Дефолтовый шлюз через pppXX.
На сервере добавить маршрут для сети в которую надо через ovpn.

Вот я конекчусь к серверу и дефолтовый шлюз не меняется.

ifconfig:

eth0 Link encap:Ethernet HWaddr 30:5a:3a:09:58:2d
inet addr:192.168.5.32 Bcast:192.168.5.255 Mask:255.255.255.0
inet6 addr: fe80::325a:3aff:fe09:582d/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:86339 errors:0 dropped:0 overruns:0 frame:0
TX packets:54709 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:118197412 (118.1 MB) TX bytes:4885515 (4.8 MB)

tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.10.57.17 P-t-P:10.10.57.18 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

route. Дефолтовый шлюз как был 192.168.5.1, так и остался, зато есть маршрут для сети за ovpn: 10.10.57.0

Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface default 192.168.5.1 0.0.0.0 UG 0 0 0 eth0
10.10.57.0 10.10.57.18 255.255.255.0 UG 0 0 0 tun0
10.10.57.18 * 255.255.255.255 UH 0 0 0 tun0
mail.pmprofessi 192.168.5.1 255.255.255.255 UGH 0 0 0 eth0
192.168.5.0 * 255.255.255.0 U 1 0 0 eth0

traceroute просто в интернеты:

traceroute to ya.ru (93.158.134.3), 30 hops max, 60 byte packets
1 192.168.5.1 (192.168.5.1) 0.526 ms 0.876 ms 1.218 ms
2 * * *
3 mm-202-80-xx-xx.dynamic.pppoe.mgts.by (xx.xx.80.202) 27.003 ms 30.749 ms 30.924 ms
4 10.0.3.45 (10.0.3.45) 36.409 ms 36.535 ms 39.857 ms
5 core1.net.belpak.by (93.85.80.45) 41.872 ms 42.011 ms 45.102 ms

skip

16 http://www.yandex.ru (93.158.134.3) 41.603 ms 41.396 ms 39.791 ms

traceroute в сеть за ovpn

traceroute to 10.10.57.1 (10.10.57.1), 30 hops max, 60 byte packets
1 10.10.57.1 (10.10.57.1) 93.248 ms 95.093 ms 97.033 ms

zooooo ()
Последнее исправление: zooooo (всего исправлений: 4)

решение

Проблема решена, работа организована следующим образом: если хотим использовать ovpn как шлюз – тогда используем прокси в настройках программы, которая будет выходить в сеть. Использовал socks5 – dante-server(в репозитарии старая версия – установку tos байта не поддерживает, скачал исходники и скомпилировал).
В настройках socks указал, чтобы его трафик помечался tos = 0x08.
Использовал iproute2, чтобы направить трафик с tos на интерфейс opvn.

ip rule add tos 0x08 table vpn;
ip route add 0.0.0.0 dev tun0 table vpn;
Еще потребовалось отключить rp_filter на интерфейсе tun0/all.
В iptables, в цепочке mangle, PREROUTING сбрасывал всем пакетам байт tos = 0x0.

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