Все работают из дома, а для многих это удаленная работа на серверах. Мы можем подключиться к ним только через 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
Спасибо за чтение 🙂 Если это действительно помогло вам, не стесняйтесь ставить лайки, комментировать и делиться этим блогом.