Назад | Перейти на главную страницу

множественный выбор трафика tuntap VPN

У меня есть приложение php / bash поверх Linux-машины (centos или debian, но предполагайте, что redhat на тот случай, если для ответа нужен другой диалект), подключенного к порту 80.

На самом деле я отлично могу открыть VPN через openvpn в командной строке Linux. Я использую опцию «route-nopull» в файле конфигурации .ovpn, чтобы обеспечить доступность сервера, поэтому у меня есть устройство tuntap под рукой в ​​активном режиме ожидания, как только я решу направить трафик через него.

Приятно знать, что у меня есть поставщики как tun, так и tap, но мой любимый провайдер использует tun.

До сегодняшнего дня мне просто нужно было маршрутизировать трафик:

sudo route add 123.123.123.123 tun0

простой и веселый. Теперь мне нужно открыть несколько независимых запросов, и route-nopull позволяет мне подключать несколько виртуальных частных сетей, готовых к использованию: tun0 tun1 tun2 ... Моя проблема в том, что мое "решение маршрута" вынуждает приложение запрашивать только последовательный путь через одно устройство, и мне нужно дождаться второго подключения! Вдобавок это слишком для моих навыков ... Мне нужно поделиться идеями и техническая помощь.

У меня плохие навыки работы с iptables, и я подумал, что, возможно, обратный прокси-сервер может позволить мне чередовать запросы, например, localhost: 9990 -> tun0, localhost: 9991 -> tun1 и т. д., но у меня нет опыта обратного проксирования, и они обычно не поддерживают устройства tuntap. Я совершенно уверен, что другое решение - iptables с несколькими таблицами маршрутизации: 123.123.123.123:9990 -> помечено для rt0 -> переписано как 123.123.123.123:80 -> rt0 направляет его через tun0, который является его шлюзом по умолчанию и т.д. и т.д. для tun1 и так далее.

Но это уж слишком для моих навыков !!! Вдобавок я боюсь скомпрометировать мою рабочую установку неверными предположениями и грязными тестами.

Спасибо за чтение и помощь.

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

Я решил и задокументировал это здесь: http://aftermanict.blogspot.it/2015/11/bash-iptables-iproute2-and-multiple.html

Это заставит ядро ​​постоянно маршрутизировать пакеты, разрешит несколько маршрутов и даже для сетей, не аттестованных на машине:

nano /etc/sysctl.conf

net.ipv4.conf.default.rp_filter = 2
net.ipv4.conf.all.rp_filter = 2
net.ipv4.ip_forward = 1

for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 0 >| $f ; done

Это инициализирует iptables и, в частности, mangle и nat, которые необходимы для маркировки трафика:

iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X

добавить редактирование альтернативных маршрутов:

nano /etc/iproute2/rt_tables

Добавьте (имена ваши ссылки):

1 tunnel0
2 tunnel1

добавляя маршруты и правила, мы используем идентификаторы таблиц вместо имен, которые являются более непосредственными. Как вы могли заметить, шлюз не имеет значения, особенно для туннелей, которые могут иметь динамические шлюзы:

ip route add 0.0.0.0/0 dev tun0 table 1
ip route add 0.0.0.0/0 dev tun1 table 2

добавить правила для маркировки трафика и привязки к соответствующей таблице:

ip rule add from all fwmark 1 table 1
ip rule add from all fwmark 2 table 2
ip route flush cache

проверьте, нравится ли вам:

ip route show table 1
ip route show table 2
ip rule show

если что-то упустили, можно удалить так:

ip rule del table 1
ip route flush table 1

СЕЙЧАС НУЖНАЯ ЧАСТЬ: ЭТО НЕ РАБОТАЕТ:

iptables -A PREROUTING -t mangle -p tcp --dport 80 -j MARK --set-mark 1

ЭТО БУДЕТ:

iptables -A OUTPUT -t mangle -p tcp --dport 80 -j MARK --set-mark 1
iptables-save

Вам нужно выбрать трафик и одновременно протолкнуть его в устройство / туннель? Нет проблем, я тоже решил:

iptables -A OUTPUT -t mangle -p tcp --dport 10001 -j MARK --set-mark 1
iptables -A OUTPUT -t mangle -p tcp --dport 10002 -j MARK --set-mark 2
iptables -t nat -A OUTPUT -p tcp --dport 10001 -j DNAT --to :80
iptables -t nat -A OUTPUT -p tcp --dport 10002 -j DNAT --to :80

NAT обязателен для ответа

iptables -t nat -A POSTROUTING -o $DEV1 -j MASQUERADE
iptables -t nat -A POSTROUTING -o $DEV2 -j MASQUERADE

iptables-save