我在用着命名空间-openvpn确保我的 deluge 中的 torrent 流量始终处于 VPN 后面。修改后的脚本来自这篇博文帮助将 VPN 命名空间连接到真实网络:
ip link add vpn0 type veth peer name vpn1
ip link set vpn0 up
ip link set vpn1 netns <NS-NAME> up
ip addr add 10.200.200.1/24 dev vpn0
ip netns exec <NS-NAME> ip addr add 10.200.200.2/24 dev vpn1
ip netns exec <NS-NAME> ip route add default via 10.200.200.1 dev vpn1
iptables -A INPUT \! -i vpn0 -s 10.200.200.0/24 -j DROP
iptables -t nat -A POSTROUTING -s 10.200.200.0/24 -o en+ -j MASQUERADE
sysctl -q net.ipv4.ip_forward=1
然后可以在命名空间中启动 Deluge:
sudo ip netns exec <NS-NAME> sudo -u $USER deluged
我最初使用这个问题和答案要在同一命名空间中运行 deluge 守护进程和 deluge-web,并使用 socat 将请求转发到 Web ui 端口:
socat tcp-listen:8112,reuseaddr,fork tcp-connect:10.200.200.2:8112
这对于正常使用 deluge 来说效果很好,但出于脚本编写的原因,我需要访问守护进程本身,因此我将 deluge-web 移出了命名空间,并尝试对守护进程端口使用以下命令:
socat tcp-listen:58846,reuseaddr,fork tcp-connect:10.200.200.2:58846
但是,当尝试通过 Web UI 访问守护程序时,socat 会产生以下错误:
2019/04/07 18:40:47 socat[13957] E connect(5, AF=2 10.200.200.2:58846, 16): Connection refused
使用这个 Python 库像这样连接到守护进程:
from deluge_client import DelugeRPCClient
client = DelugeRPCClient('127.0.0.1', 58846, 'user', 'pw')
client.connect()
抛出错误:
File "/usr/lib/python3.6/ssl.py", line 1109, in connect
self._real_connect(addr, False)
File "/usr/lib/python3.6/ssl.py", line 1100, in _real_connect
self.do_handshake()
File "/usr/lib/python3.6/ssl.py", line 1077, in do_handshake
self._sslobj.do_handshake()
File "/usr/lib/python3.6/ssl.py", line 689, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:847)