仅将 OpenVPN 用于一个应用程序/服务

3 vpn transmission 18.04

我正在使用托管在其他地方的 ubuntu 服务器。在该服务器上运行的事情之一是传输。我想知道我是否可以只为该应用程序使用 VPN,因为一旦我启用了 VPN,随着 IP 的变化,我将无法访问服务器。

I have seen namespaced-openvpn but not sure if that would work for this application

(I am using headless Ubuntu)

Thanks

Cul*_*sac 6

您要求的是使用 OpenVPN 为 torrent 客户端传输拆分隧道,其复杂性取决于您喜欢的防火墙规则。我已经写了基础知识,但是由于已经有非常详细的文章介绍了如何设置带回退的拆分隧道凭据并使传输仅遵循该凭据,因此假设您已经拥有可用的 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 
Run Code Online (Sandbox Code Playgroud)

2.检查ip route list并找到看起来像 的行192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.101eth01是活动网络接口,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
Run Code Online (Sandbox Code Playgroud)

安装sudo apt install iptables-persistent并按YES以获得它要求的任何权限。

4.在openvpn config目录下新建一个脚本文件,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.
Run Code Online (Sandbox Code Playgroud)

使这个脚本可执行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.
Run Code Online (Sandbox Code Playgroud)

使这个脚本可执行 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
Run Code Online (Sandbox Code Playgroud)

这可能没有必要,因为它只是将安全性加强到内核级别。
重新加载 sysctl 和 systemd sudo sysctl --system, sudo systemctl daemon-reload. 现在检查 openvpn 是否运行正常,systemctl status openvpn@openvpn.service以及您作为用户 zzz 的 openvpn 终端 IP,sudo -u vpn -i -- curl ifconfig.co

如果curl显示正确的 VPN IP,您就可以进行下一步了。您不应该与服务器断开连接。

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
Run Code Online (Sandbox Code Playgroud)

这将允许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/
Run Code Online (Sandbox Code Playgroud)

对传输的所有下载文件夹执行相同操作,例如sudo chown -R zzz:zzz ~/Downloads && sudo chmod -R 775 ~/Download.
将更改后的目录添加到传输设置中sudo nano /etc/transmission-daemon/settings.json

"download-dir": "/home/Downloads",
"umask": 002,
Run Code Online (Sandbox Code Playgroud)

8.最后开启sudo systemctl start transmission-daemon.service。如果您使用的是传输 Web GUI,请遵循 nginx 方法。您可以尝试在此处检查 torrent 是否与 openvpn IP 一起工作。

  • 谢谢。非常详细。我会尝试。 (2认同)