使用 socat 访问不同命名空间中的 deluge 守护进程

使用 socat 访问不同命名空间中的 deluge 守护进程

我在用着命名空间-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)

相关内容