我正在使用 Debian Lenny,并且我只想通过 OpenVPN 隧道传输 rtorrent。
我有一个正在运行的隧道,配置文件如下所示:
client
dev tun
proto udp
remote openvpn.xxx.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca /etc/openvpn/xxx/keys/ca.crt
cert /etc/openvpn/xxx/keys/client.crt
key /etc/openvpn/xxx/keys/client.key
tls-auth /etc/openvpn/xxx/keys/tls.key 1
ns-cert-type server
comp-lzo
verb 3
auth-user-pass
script-security 3
reneg-sec 0
我的想法是,我可以在内部运行一个 sockd 代理,将流量重定向到 openvpn 隧道。我可以使用 *nix“代理程序”应用程序“tsocks”使 rtorrent 能够通过该代理进行连接(因为 rtorrent 不支持代理)。
我在配置 sockd 时遇到了麻烦,因为每次连接时 VPN 内的 IP 都会发生变化。有人说这个配置文件会有所帮助: http://ircpimps.org/sockd.conf 由于每次连接时我的 IP 都会发生变化,我不知道该在配置文件中输入什么。我无法控制主机端配置文件。
需要任何帮助。任何其他方法都非常受欢迎。
答案1
您必须以某种方式标记此应用程序的数据包。最简单的方法如下:
- 以自己的用户身份运行 rtorrent
- 使用 iptables 标记来自 rtorrent 用户的连接(-m Owner --uid-owner rtorrent)
- 或者你也可以匹配 PID (--pid-owner)
- 使用策略路由来以不同于“正常”路由表的方式路由这些连接。
如果在这里写详细的解释会非常有用,但这应该会给你足够的关键词来谷歌搜索。
答案2
解决这个问题的另一种方法是使用 socks ower ssh ( ssh -D portnumber
),它可以与 tsocks 配合使用。
答案3
SOCKS 代理可能不是完成这项工作的最佳工具。我的设置方式如下:
- 以特定用户身份运行 rtorrent
- 使用 iptables 通过 VPN 转发该用户的流量
问题主要在于您是否想以其他用户身份运行 rtorrent。您很可能在 screen 中运行它,而 screen 并不喜欢以其他用户身份运行。这是可行的,但您需要弄清楚另外一件事。
当我针对我的设置研究这个确切问题时,我发现在进程级别限制 OpenVPN 极其困难。如果你能找到一种方法让它工作,我肯定会感兴趣。
答案4
指定rtorrent
只监听tun0
或指定给它的 IP。这应该可以处理传入连接。
我不知道“sockd”是什么,但tsocks
配置文件是/etc/tsocks.conf
IIRC。但你需要在另一端有一个支持 socks 的应用程序,而 OpenVPN 不是。
看起来您可以rtorrent
将其用于传出连接的端口限制在特定范围内。执行此操作,然后使用iptables
这些REDIRECT
端口上的传出流量从eth0
到tun0
。