1

Я пытаюсь запустить VPN. Я бы хотел, чтобы программы явно запрашивали интерфейс, а не маршрутизировали ВСЕ трафик, как с помощью curl --interface .

curl --interface ppp0 ip.bsd-unix.net должен отправлять через VPN, но каким-то образом, используя tcpdump или iftop , я вижу трафик, проходящий через eth0, даже если исходный IP равен 10.10.1.2. Вот мое ip route show:

default via 149.x.y.z dev eth0
10.10.1.1 dev ppp0  proto kernel  scope link  src 10.10.1.2
149.x.y.128/25 dev eth0  proto kernel  scope link  src 149.x.y.172

Некоторые IP скрыты. Второй добавляется xl2tp при запуске и создании интерфейса ppp0. 149.etc - это моя локальная сеть, а 10.etc - моя VPN.


Кроме того, когда я ping -I ppp0 8.8.8.8 , я вижу активность ppp0, и я получаю ответы с более высоким мс, которые предполагают, что они проходят через VPN.

1 ответ1

1

Я предположил, что если исходный IP-адрес пакета совпадает с IP-адресом интерфейса, он будет использовать указанный интерфейс. И если бы это не было присущим поведению IP, то мой второй маршрут сделал бы это возможным: часть пути src была для меня красной сельдью.

Итак, мои программы связываются с адресом ppp0, который устанавливает их исходный IP, верно? Я сделал то, что сказал @davidgo и сделал отдельную таблицу маршрутизации ...

echo 200 custom | sudo tee -a /etc/iproute2/rt_tables

... затем добавили правило для использования пользовательской таблицы для пакетов, которые имеют этот IP-адрес источника ...

sudo ip rule add from 10.10.1.2 lookup custom

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

sudo ip route add default via 10.10.1.1 dev ppp0 table custom

curl ip.bsd-unix.net дает мне мой домашний IP, а curl --interface ppp0 ip.bsd-unix.net дает мне удаленный IP моего VPN. Оно работает!

Тем не менее, мне интересно, почему ping правильно проходил через ppp0.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .