Категорії
Linux Misc, staff, other Routers, GW, Internet

Завернуть часть трафика в OpenVPN туннель.

Вводные данные: 2 сервера Linux связаны между собой через OpenVPN туннель. Нужно для части клиентов за одним из концов VPN’a завернуть весь трафик в туннель, то есть, что бы они выходили в интернет не через свой GW, а через удалённый GW, пройдя через VPN.

UPD. В данной схеме есть нюанс: она будет работать, если клиентские машины находятся за хостом, который является OpenVPN-клиентом. В обратном случае, пакеты просто не будут покидать хост, хотя через tcpdump вы их будете видеть. Связано это с особенностями самого OpenVPN’a. Пока не нашёл как это можно решить. Как workaround, можно либо изменить роли клиент-сервер, либо использовать простой туннель или другой тип VPN’a.

Настройки клиента

В client.conf OpenVPN’a добавляем такую строку

up /etc/openvpn/client.sh

Сам client.sh:

#!/bin/sh
/sbin/ip route add default via 10.6.11.1 proto static table T2
/sbin/ip route add 192.168.55.3 via 10.6.11.2 dev tun4
/sbin/ip route add 192.168.55.4 via 10.6.11.2 dev tun4
/opt/scripts/remote_vpn.sh

где 10.6.11.1 – внутренний IP тунеля удалённого сервера, таблица T2 описана в файле /etc/iproute/rt_table так:

251 T2

Сам /opt/scripts/remote_vpn.sh выглядит так:

#!/bin/sh
IP=/sbin/ip
table="T2"
$IP rule del table $table
while $IP rule delete from 0/0 to 0/0 table $table
do
        true
done
$IP rule add from 192.168.55.3/32 to 0/0 table $table
$IP rule add from 192.168.55.4/32 to 0/0 table $table

После изменений (внесение/удаление новых IP), просто перезапускаем этот скрипт.

Настройка сервера

Тут единственное, что нужно, так это разрешить клиентам 192.168.55.3,… выходить в интернет. То есть, разрешить для них NAT + правила FireWall.

====================================================================

Дополнение.

Если по какой-то причине это не работает, есть вариант заворачивать пакеты на уровне меток.

  • Правило для роутинга на основе меток:

# ip rule add fwmark 0x3 lookup T2

  • Правило файервола (тут происходит процесс “навешивания” меток):

# iptables -t mangle -A PREROUTING -i $int_if -p tcp -m multiport --dports 80,443 -j MARK --set-mark 0x3

UPD.

Иногда, при использовании multiport часть трафика перестает заворачиваться. Workaround в этом случае только один – для каждого порта отдельное правило.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Домашняя страничка Andy
Записки молодого админа
Самостоятельная подготовка к Cisco CCNA
Самостоятельная подготовка к Cisco CCNP
Powered by Muff