Задать вопрос
@andrew_progs

Double VPN. Как маршрутизировать трафик одного tun-интерфейса через другой tun?

На сервере есть 3 сетевых интерфейса:

eth0 - интернет
tun1 - openvpn-сервер(10.8.1.1/24)
tun2s1 - интерфейс tun2socks, подключенный через eth0(10.9.1.1/24)

Мне нужно чтобы трафик с tun1 ходил через tun2s1.

Примерная схема: Client -> tun1 -> tun2s1 -> eth0

Если выполнить команду curl --interface tun2s1 http://site.com, то запрос совершается верно, то есть tun2s1 подключен корректно. Проблема в подключении tun1 и tun2s1 интерфейсов.

Вот правила iptables, которые я использовал для подключения через eth0:

iptables -A FORWARD -o eth0 -i tun1 -s 10.8.1.1/24 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT


Но если я поменяю eth0 на tun2s1 - клиент не соединяется с интернетом. Я уже перепробовал множество вариантов, но ни один из них не сработал, мои знания iptables довольно низкие. Подскажите как мне правильно настроить перенаправление.
  • Вопрос задан
  • 1139 просмотров
Подписаться 2 Средний Комментировать
Решения вопроса 2
@dronmaxman
VoIP Administrator
У меня вот такая дичь.
echo "100 	vpn" >> /etc/iproute2/rt_tables
echo 1 > /proc/sys/net/ipv4/ip_forward

export VPN_NET="10.10.10.0/24"
export VPN_IFACE="tun1"
export VPN_OFACE="tun2s1"

iptables -t nat -A PREROUTING -s $VPN_NET -i $VPN_IFACE -m conntrack --ctstate RELATED,ESTABLISHED -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff
iptables -t nat -A PREROUTING -s $VPN_NET -j MARK --set-xmark 0x1/0xffffffff
iptables -t nat -A PREROUTING -s $VPN_NET -j CONNMARK --save-mark --nfmask 0xffffffff --ctmask 0xffffffff

iptables -t nat -A POSTROUTING -s $VPN_NET -o $VPN_OFACE -j MASQUERADE

ip rule add fwmark 1 table vpn
ip route add default dev $VPN_OFACE table vpn
ip route flush cache
Ответ написан
@andrew_progs Автор вопроса
Решение:
# Включаем ip forward
echo 1 > /proc/sys/net/ipv4/ip_forward

# Маскируем трафик
iptables -t nat -A POSTROUTING -s 10.8.1.1/24 -o tun2s1 -j MASQUERADE

# Добавляем новую таблицу маршрутизации
echo "100  admin" >> /etc/iproute2/rt_tables

# Добавляем интерфейс в новую таблицу
ip route add 10.9.1.0/32 dev tun2s1 src 10.9.1.1 table admin

# Объявляем интерфейсом по-умолчанию
ip route add default via 10.9.1.1 dev tun2s1 table admin

# Создаем правило маршрутизации для tun1, направляющее трафик с tun1 в таблицу admin 
ip rule add from 10.8.1.0/24 table admin 

# Чистим кэш ip route для обновления правил
ip route flush cache

# Отключаем фильтр обратного пути для всех интерфейсов*
for i in /proc/sys/net/ipv4/conf/*/rp_filter ; do
  echo 0 > $i 
done

# Включаем пакеты с локальных источников для всех интерфейсов*
for i in /proc/sys/net/ipv4/conf/*/accept_local ; do
  echo 1 > $i 
done


*Думаю можно и не для всех, но это для меня сработало и уже нет времени на эту задачу. Если вы знаете как лучше - напишите, я отредактирую ответ.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
martin74ua
@martin74ua Куратор тега Linux
Linux administrator
iproute вам поможет
Фаервол маркирует трафик, маскарадит... А маршруты - это iproute
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы