Выборочная маршрутизация сети или разделенное туннелирование через VPN

Все работают из дома, а для многих это удаленная работа на серверах. Мы можем подключиться к ним только через VPN, но это замедляет мой просмотр и видеоконференции.

Мы пытались найти способ использовать VPN специально для сервера и позволить другому трафику двигаться нормально. Вот тогда-то мы и наткнулись на это решение. В этом блоге мы объясним решение шаг за шагом.

ps.: В конце этого блога вы сможете выбрать, какой веб-сайт или IP-адреса вы хотите маршрутизировать через VPN.

Требования:

 

  • Ubuntu (должен работать и на других дистрибутивах Linux)
  • Если вы используете windows, Этот метод работает с подсистемой Windows для Linux. Убедитесь, что у вас есть WSL2, прежде чем продолжить.
  • Openfortivpn
  • Убедитесь, что вы можете подключиться к VPN, используя его.

Шаги для выборочной маршрутизации

1. конфигурационный файл VPN

Этот файл сообщает нашему VPN-клиенту конфигурацию нашего VPN.

Сохраните приведенный ниже конфигурационный файл как vpn-config. conf в любом месте вашего компьютера

host = vpn.iiitd.edu.in

port = 10443

username = <your username>

password = <your pass>

set-routes = 0

set-dns = 0

pppd-use-peerdns = 0

set-routes = 0 указывает, чтобы не делать никаких маршрутов через VPN, теперь мы будем белый список веб-сайтов, чтобы использовать через VPN.

2. Настройка скрипта PPP

Что такое ППС?: PPP-это протокол точка-точка. Linux использует этот протокол для связи по протоколу TCP/IP с вашим интернет-провайдером.

Сейчас мы напишем скрипт, который внесет в белый список определенные домены для прохождения через VPN.

Для создания сценария используйте следующие команды

sudo touch /etc/ppp/ip-up.d/fortivpn

sudo chmod a+x /etc/ppp/ip-up.d/fortivpn

Что такое pppd? Демон PPP (pppd) — это свободно доступная реализация протокола Point-to-Point Protocol (PPP), который работает во многих системах Unix. читайте дальше

Что такое ip-up? /etc/ppp/ip-up-это shell — скрипт, выполняемый pppd при появлении ссылки/интернета. Читать далее

Отредактируйте приведенный выше скрипт с помощью вашего любимого редактора, он будет выглядеть следующим образом:

#!/bin/bash

#

# Whitelist here all domains that need to go through openfortivpn

# Domains and IPs are separated by a space

#

ips='192.168.2.217 192.168.29.151'

domains='example.com example.fr'



let resolved

for domain in $domains; do

  resolved=`dig +short $domain | tail -n1`

  ips="$ips $resolved"

done



for ip in $ips; do

  route add $ip dev ppp0

done

Теперь добавьте IP-адреса и домены, к которым вы хотите получить доступ через VPN.

3. запустите VPN

Следующая команда должна подключить вас к вашему VPN прямо сейчас.

sudo openfortivpn -c vpn-config.conf

Ниже вы можете увидеть маршруты, добавленные для ip-адресов. ppp0-это vpn-интерфейс, а enp2s0-ethernet.

andreyex@andreyex ~> route                                                                  (base)

Kernel IP routing table

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface

default         _gateway        0.0.0.0         UG    100    0        0 enp2s0

one.one.one.one 0.0.0.0         255.255.255.255 UH    0      0        0 ppp0

103.25.231.4    0.0.0.0         255.255.255.255 UH    0      0        0 ppp0

link-local      0.0.0.0         255.255.0.0     U     1000   0        0 enp2s0

192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 enp2s0

192.168.2.217   0.0.0.0         255.255.255.255 UH    0      0        0 ppp0

192.168.29.151  0.0.0.0         255.255.255.255 UH    0      0        0 ppp0

Вот и все! Теперь вы можете работать на своем сервере и наслаждаться быстрым интернетом вместе с ним 🙂

Бонус: автоматический запуск VPN при загрузке

Это довольно раздражает, чтобы войти в VPN каждый раз, прежде чем начать работу. Поэтому мы создали системный сервис для автоматического подключения к VPN при загрузке. Отказ от ответственности: это не будет работать с WSL2

Выполните эти команды для настройки службы

sudo touch /etc/systemd/system/openfortivpn.service

Откройте его с помощью вашего любимого редактора и введите эту конфигурацию.

[Unit]

Description = OpenFortiVPN

After=network-online.target

Documentation=man:openfortivpn(1)



[Service]

Type=idle

ExecStart = /usr/bin/openfortivpn -c <path to your config file>

StandardOutput=file:<any-place-where you want to save your logs>

Restart=always

RestartSec=10



[Install]

WantedBy=multi-user.target

 

Чтобы запустить эту службу, просто запустите ее

sudo systemctl enable openfortivpn

sudo systemctl start openfortivpn

Чтобы проверить, работает ли он

andreyex@andreyex ~> sudo systemctl status openfortivpn

● openfortivpn.service - OpenFortiVPN

   Loaded: loaded (/etc/systemd/system/openfortivpn.service; enabled; vendor preset: enabled)

   Active: active (running) since Sat 2020-04-25 13:22:26 IST; 3h 43min ago

     Docs: man:openfortivpn(1)

 Main PID: 1851 (openfortivpn)

    Tasks: 6 (limit: 4915)

   CGroup: /system.slice/openfortivpn.service

           ├─1851 /usr/bin/openfortivpn -c /home/andreyex/Documents/vpn-configs/iiitd.conf

           └─1852 /usr/sbin/pppd 38400 :1.1.1.1 noipdefault noaccomp noauth default-asyncmap nopcomp



Apr 25 13:22:26 andreyex systemd[1]: Started OpenFortiVPN.

Apr 25 13:22:26 andreyex pppd[1852]: pppd 2.4.7 started by root, uid 0

Apr 25 13:22:26 andreyex pppd[1852]: Using interface ppp0

Apr 25 13:22:26 andreyex pppd[1852]: Connect: ppp0 <--> /dev/pts/0

Apr 25 13:22:27 andreyex pppd[1852]: local  IP address 10.212.134.101

Apr 25 13:22:27 andreyex pppd[1852]: remote IP address 1.1.1.1

 

Спасибо за чтение 🙂 Если это действительно помогло вам, не стесняйтесь ставить лайки, комментировать и делиться этим блогом.