Я использую сервер Ubuntu, размещенный в другом месте. На этом сервере одна из вещей работает - передача. Мне было интересно, могу ли я иметь VPN только для этого приложения, так как после включения VPN я теряю доступ к серверу при изменении IP.
Я видел namespaced-openvpn, но не уверен, будет ли это работать для этого приложения
(я использую Ubuntu без головы)
Спасибо
То, что вы просите, - это разделенное туннелирование с 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
- это inet. Ваш может быть другим. Следите за ними, следуя предстоящим сценариям.
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
и нажмите ДА для получения любого запрашиваемого разрешения.
[+1168] 4. [+1168] Создайте новый файл сценария в каталоге конфигурации 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
в последнюю строку.
Кроме того, вы можете добавить новый параметр ядра config как 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
и ваш конечный IP-адрес openvpn от имени пользователя zzz, sudo -u vpn -i -- curl ifconfig.co
Если curl
показывает правильный VPN-IP, то вы можете использовать его следующие шаги. Вы не должны быть отключены от сервера.
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
.
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 здесь .