Используйте OpenVPN только для одного приложения / услуги
Я использую сервер Ubuntu, размещенный в другом месте. На этом сервере одна из вещей работает - передача. Мне было интересно, могу ли я иметь VPN только для этого приложения, так как после включения VPN я теряю доступ к серверу при изменении IP.
Я видел namespaced-openvpn, но не уверен, что это будет работать для этого приложения
(Я использую безголовый Ubuntu)
Спасибо
2 ответа
То, что вы просите, это разделенное туннелирование с OpenVPN для торрент-передачи клиента, и сложность этого зависит от правил брандмауэра, которые вы предпочитаете. Я бы написал основы, но поскольку уже были действительно хорошие подробные статьи о том, как настроить учетные данные для раздельного туннелирования с резервным режимом и сделать только Transmission, чтобы следовать этим учетным данным, я приведу лишь несколько советов, предполагая, что у вас уже есть работающая конфигурация OpenVPN. и правильное ограничение DNS (без утечек).
1. Установите sudo apt install iptables resolvconf apt-utils в то время как у вас уже могут быть некоторые программы. Теперь добавьте в вашу систему нового пользователя, у которого не будет никаких прав суперпользователя, sudo adduser --disabled-login zzz, zzz - это имя этого нового пользователя. Чтобы избежать головной боли от разрешения службы, добавьте zzz в свою группу, а свою в zzz.
sudo usermod -aG zzz <username>
sudo usermod -aG <group_username> zzz
2. Проверьте ip route list и найти строку, которая выглядит как 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.101, eth01 активный сетевой интерфейс и 192.168.1.101 это инет. Ваш может быть другим. Следите за ними, следуя предстоящим сценариям.
3. Флеш iptables правила sudo iptables --flush, Добавьте правило, ограничивающее пользователя zzz обычным сетевым интерфейсом, работает только через туннель OpenVPN.
sudo iptables -A OUTPUT ! -o lo -m owner --uid-owner zzz -j DROP
устанавливать sudo apt install iptables-persistent и нажмите YES для любого разрешения, которое оно запрашивает.
4. Создайте новый файл скрипта в директории конфигурации openvpn sudo nano /etc/openvpn/iptables.sh и добавьте этот скрипт.
#! /bin/bash
export INTERFACE="tun0"
export VPNUSER="zzz" # watch out.
export LOCALIP="192.168.1.101"
export NETIF="eth0"
# Look up the first article on "iptables Script for vpn User" section for the script, I don't know if I'm allowed to paste that.
# The script simply uses iptables built-in chains to redirect network traffic to VPN.
Сделайте этот скрипт исполняемым sudo chmod 755 /etc/openvpn/iptables.sh,
Создать скрипт IP-маршрутизации sudo nano /etc/openvpn/routing.sh и введите
#! /bin/bash
VPNIF="tun0"
VPNUSER="zzz"
# Look up the first article on "Routing Rules Script for the Marked Packets" section for the script, I don't know if I'm allowed to paste that.
# The script simply puts some routing commands to block the traffic when VPN goes down.
Сделайте этот скрипт исполняемым sudo chmod 755 /etc/openvpn/routing.sh
5. Добавьте новое пользовательское значение zzz в таблицу IP-маршрутизации. sudo nano /etc/iproute2/rt_tables, Просто добавь 200 zzz на последней строке.
Кроме того, вы можете добавить новый конфиг параметра ядра как sudo nano /etc/sysctl.d/zzz.conf и положи
net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2
net.ipv4.conf.eth0.rp_filter = 2
В этом может не быть необходимости, поскольку это только усиливает безопасность до уровня ядра.
Перезагрузите sysctl и systemd sudo sysctl --system, sudo systemctl daemon-reload, Теперь проверьте, нормально ли работает openvpn, systemctl status openvpn@openvpn.service и ваш openvpn end-IP как пользователь zzz, sudo -u vpn -i -- curl ifconfig.co
Если curl показывает правильный IP-адрес VPN, вы можете перейти к следующим шагам. Вы не должны быть отключены от сервера.
6. Остановите службу передачи-демона, sudo systemctl stop transmission-daemon, Создайте новый каталог и systemd конфиг на sudo mkdir -p /etc/systemd/system/transmission-daemon.service.d && sudo nano /etc/systemd/system/transmission-daemon.service.d/local.conf, Вставьте конфиг
[Unit]
After=sys-devices-virtual-net-tun0.device
Wants=sys-devices-virtual-net-tun0.device
[Service]
User=
User=zzz
Group=
Group=zzz
Type=simple
ExecStart=
ExecStart=/usr/bin/transmission-daemon -f --log-error -g /etc/transmission-daemon
Restart=on-failure
RestartSec=5
Это позволит transmission Служба запускается только после запуска службы openvpn. Перезагрузить systemd sudo systemctl daemon-reload,
7. Добавление правильного пользователя, группы и разрешения на передачу
sudo chown -R zzz:zzz /etc/transmission-daemon/ && sudo chmod -R 775 /etc/transmission-daemon/
sudo chown -R zzz:zzz /var/lib/transmission-daemon/ && sudo chmod -R 775 /var/lib/transmission-daemon/
Сделайте то же самое для всех папок загрузки передачи, как sudo chown -R zzz:zzz ~/Downloads && sudo chmod -R 775 ~/Download,
Добавить измененный каталог в настройки передачи sudo nano /etc/transmission-daemon/settings.json,
"download-dir": "/home/Downloads",
"umask": 002,
8. Наконец включите sudo systemctl start transmission-daemon.service, Если вы используете веб-интерфейс Transmission, следуйте методу nginx. Вы можете попробовать проверить, работает ли торрент с IP openvpn здесь.
ответ выше очень сложно/долго реализовать. кажется, более простой подход здесь: https://github.com/slingamn/namespaced-openvpn
проверил, работает как положено!
упростить вещи в
.bashrcя сделал 1 функцию и 2 псевдонима:
vpn_run() { nohup $1 &>/dev/null & }
alias vpn-prepare='sudo /path-to/namespaced-openvpn --config /path-to/openvpn.ovpn'
alias vpn-run='vpn_run'
поэтому вы должны запустить 2 терминала с помощью команд:
-
vpn-prepare -
vpn-run <COMMAND>- куда<COMMAND>= 'firefox' например. он будет запускать приложение в фоновом режиме