Прочитала совсем немного и близко, чувствую, и волосы выдергиваю ... пожалуйста Помогите!
У меня есть клиент OpenVPN, сервер которого устанавливает локальные маршруты, а также изменяет gw по умолчанию (я знаю, что могу предотвратить это с помощью --route-nopull). Я хотел бы, чтобы весь исходящий трафик http и ssh через локальный gw, а все остальное через vpn.
Вот таблица маршрутов после подключения openvpn:
# ip route show table main
0.0.0.0/1 via 10.102.1.5 dev tun0
default via 192.168.1.1 dev eth0 proto static
10.102.1.1 via 10.102.1.5 dev tun0
10.102.1.5 dev tun0 proto kernel scope link src 10.102.1.6
{OPENVPN_SERVER_IP} via 192.168.1.1 dev eth0
128.0.0.0/1 via 10.102.1.5 dev tun0
169.254.0.0/16 dev eth0 scope link metric 1000
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.6 metric 1
Это заставляет все пакеты проходить через туннель VPN, кроме тех, которые предназначены для 192.168.1.0/24.
Делать wget -qO- http://echoip.org
показывает адрес сервера vpn, как и ожидалось, пакеты имеют 10.102.1.6 в качестве адреса источника (локальный ip vpn) и маршрутизируются через tun0
... как сообщает tcpdump -i tun0
(tcpdump -i eth0
не видит никакого трафика).
Я пробовал:
main
таблица выше)iptables -t mangle -I PREROUTING
правило для маркировки пакетов, предназначенных для порта 80ip rule
сопоставить искаженный пакет и указать его на вторую таблицу маршрутизацииto 192.168.1.6
и from 192.168.1.6
указать на вторую таблицу маршрутизации (хотя это лишнее)net.ipv4.conf.tun0.rp_filter=0
и net.ipv4.conf.eth0.rp_filter=0
Я также попробовал iptables mangle output
правило iptables nat prerouting
правило. Он все еще не работает, и я не уверен, что мне не хватает:
iptables mangle prerouting
: пакет все еще идет через vpniptables mangle output
: время ожидания пакета истеклоРазве не так, чтобы добиться того, чего я хочу, тогда при выполнении wget http://echoip.org
Я должен изменить адрес источника пакета на 192.168.1.6 перед его маршрутизацией? Но если я это сделаю, ответ от http-сервера будет перенаправлен обратно на 192.168.1.6 и wget
не видел бы этого, поскольку он все еще связан с tun0
(интерфейс vpn)?
Может добрая душа помочь? Какие команды вы бы выполнили после подключения openvpn, чтобы достичь того, чего я хочу?
С нетерпением жду роста волос ...
0.0.0.0/1 via 10.102.1.5 dev tun0
Это твоя проблема.
0.0.0.0/1 - это безумно большой диапазон IP-адресов (0.0.0.0 - 127.255.255.255), и это первая запись в вашей таблице маршрутизации, поэтому любой IP-адрес, попадающий в этот диапазон, будет вынужден маршрутизироваться вниз. tun0
. Диапазон настолько велик, что охватывает большую часть маршрутизируемого IP-пространства в Интернете. Итак, echoip.org, который для меня разрешает 69.163.172.52, содержится в 0.0.0.0/1 (0.0.0.0 - 127.255.255.255).
Чтобы узнать, прав ли я, попробуйте wget http://serverfault.com, который для меня разрешается в 198.252.206.16, и посмотрите, не выходит ли он из eth0. Должен, потому что он выходит за пределы (0.0.0.0 - 127.255.255.255).
В общем, я обычно делаю свое IP-пространство tun0 максимально конкретным. 10.102.0.0/16 via 10.102.1.5
например.
Если ваша цель не направлять весь ваш интернет-трафик через определенную точку выхода из соображений безопасности / мониторинга, я бы попытался сузить пространство вашего туннельного IP-адреса.