LINUX.ORG.RU

Трафик мимо OpenVPN, посредством iptables

 , ,


0

1

Всем привет. Нужна помощь с задачей. Требуется пустить определенный трафик клиента, идущий на определенный ip, мимо ovpn gateway. И все это посредством iptables.

root@pc:[/etc]: ip -4 a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: enp1s0f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 10.203.252.84/16 brd 10.203.255.255 scope global dynamic enp1s0f1
       valid_lft 20181sec preferred_lft 20181sec
8: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
    inet 192.168.0.2/24 brd 192.168.0.255 scope global tun0
       valid_lft forever preferred_lft forever
Сейчас фаервол на клиенте настроен так. Чтобы утечки не было.
#!/bin/sh
export WAN=enp1s0f1
export IPT="iptables"

$IPT -F
$IPT -F -t nat
$IPT -F -t mangle
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X

$IPT -P FORWARD DROP
$IPT -P OUTPUT DROP
$IPT -A OUTPUT -o $WAN -d <VPN_SERVER> -j ACCEPT
$IPT -A OUTPUT -o tun0 -j ACCEPT
Нужно все это сохранить, и добавить исключение для определенного ip, или списка айпишников.


#!/bin/sh
export WAN=enp1s0f1
export LAN=#внутренний интерфейс
export startIp=
export stopIp=
export IPT="iptables"

$IPT -F
$IPT -F -t nat
$IPT -F -t mangle
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X
$IPT -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -m conntrack --ctstate NEW -i $LAN -m iprange –-src-range $startIp-$stopIp -j ACCEPT
$IPT -P FORWARD DROP

$IPT -P OUTPUT DROP
$IPT -A OUTPUT -o $WAN -d <VPN_SERVER> -j ACCEPT
$IPT -A OUTPUT -o tun0 -j ACCEPT
$IPT -t nat -A POSTROUTING -o $WAN -j MASQUERADE

Вроде так

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

Не хочет. Нужно чтобы трафик на эти адреса ходил ТОЛЬКО мимо ovpn. Чтобы пакеты с определенными dst.addr в туннель не заворачивались.

Я в iptables недавно начал вникать. Но может быть, каким-то правилом, пакеты приходящие на tun0, перекидывать на $WAN, без обработки vpnagent-ом. Правильно ли я понимаю, что vpnagent прикреплен к tun0. И когда туда поступают пакеты, он их обрабатывает, и отправляет с новым dst.addr(ip vpn gateway) на $WAN?

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

так минуту кто с кем связывается? а то в данном случае клиент стучится на удаленный сервер. И попробуй поднять $IPT -t nat -A POSTROUTING -o $WAN -j MASQUERADE до строки $IPT -P FORWARD DROP

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

Попробовал. Ничего.

Есть шлюз моего провайдера, а есть шлюз удаленного VPN сервера.

В ip route стоит шлюз - удаленный сервер. Но нужно добавить исключения для трафика на определенные ip-шники. Чтобы они в обход удаленного сервера ходили. Через шлюз провайдера. И я спрашиваю, возможно ли это сделать посредством iptables. Например, поставить метрику для обоих шлюзов одинаковую, и, посредством iptables, запрещать всему трафику ходить по провайдерскому маршруту, кроме трафика с определенными dst.addr. Думаю понятно выразился. Возможно я что-то не правильно понимаю. Если так, поправьте пожалуйста.

root@pc:[/etc]: ip r
default via 192.168.0.1 dev tun0 proto static metric 50 
default via 10.203.0.1 dev enp1s0f1 proto static metric 100  
10.203.0.1 dev enp1s0f1 proto static scope link metric 100 
<VPN_SERVER> via 10.203.0.1 dev enp1s0f1 proto static metric 100 
192.168.0.0/24 dev tun0 proto kernel scope link src 192.168.0.2 metric 50 
Адреса из диапазона 10.203.0.0/16 - локальная сеть провайдера. 192.168.0.0/24 - виртуальная сеть.

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

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

Silerus ★★★★
()
#!/bin/sh
export WAN=enp1s0f1
export LAN=#внутренний интерфейс
export startIp=
export stopIp=
export IPT="iptables"

$IPT -F
$IPT -F -t nat
$IPT -F -t mangle
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X
$IPT -t nat -A PREROUTING -m iprange –-src-range $startIp-$stopIp  -j DNAT --to providerIp
$IPT -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -m conntrack --ctstate NEW -i $LAN -m iprange –-src-range $startIp-$stopIp -j ACCEPT
$IPT -P FORWARD DROP
$IPT -t nat -A POSTROUTING -o $WAN -j MASQUERADE
$IPT -P OUTPUT DROP
$IPT -A OUTPUT -o $WAN -d <VPN_SERVER> -j ACCEPT
$IPT -A OUTPUT -o tun0 -j ACCEPT
Silerus ★★★★
()
Ответ на: комментарий от Silerus

Все равно не получается.

Я не особо понимаю какую именно схему вы мне описуете. Поэтому возможно не работает из-за того, что я блокирую на сервере vpn startIp-stopIp адреса. Чтобы проверить, если ответ придет - пакеты ушли мимо впн, нет - пошли на впн.

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

извините, я тут умою руки, тут тогда надо сидеть и копать, подключать логи смотреть, я видимо уже забыл как настраивается iptables от слова совсем, легко гуглятся рецепты с объяснениями - это forwarding + masquerading, на opennet есть книга там подробно описано что происходит в iptables, пакеты по вашему сценарию бегут сверху вниз надо просто вставить нужные строчки до отправки их наружу, т.e до $IPT -A OUTPUT -o $WAN -d <VPN_SERVER> -j ACCEPT возможно в этой таблице надо было дать разрешение на исключение типа $IPT -A OUTPUT -m prange –-src-range $startIp-$stopIp -j ACCEPT

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