我想将端口 22 的连接重定向到我的 openvpn 绑定端口 60001。
Openvpn 正在 60001 服务器上运行
server:~$ sudo netstat -apn | grep openvpn
udp 0 0 67.xx.xx.137:60001 0.0.0.0:* 4301/openvpn
我将服务器端口 22 重定向至 60001
server:~$ sudo iptables -F -t nat
server:~$ sudo iptables -A PREROUTING -t nat -p udp --dport 22 -j REDIRECT --to-ports 60001
我启动 openvpn 客户端(openvpn.conf 是正确的,它可以与远程 IP 22替换为远程 IP 60001)
client:~$ ./openvpn openvpn.conf
Tue Apr 27 00:42:50 2010 OpenVPN 2.1.1 i686-pc-linux-gnu [SSL] [EPOLL] built on Mar 23 2010
Tue Apr 27 00:42:50 2010 UDPv4 link local (bound): [undef]:1194
Tue Apr 27 00:42:50 2010 UDPv4 link remote: 67.xx.xx.137:22
Tue Apr 27 00:42:52 2010 read UDPv4 [ECONNREFUSED]: Connection refused (code=111)
Tue Apr 27 00:42:55 2010 read UDPv4 [ECONNREFUSED]: Connection refused (code=111)
...
连接失败。服务器端的 tcpdump 捕获为:
server:~$ sudo tcpdump -n udp port 21 or port 60001
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
10:48:32.880307 IP 84.xx.xx.27.1194 > 67.xx.xx.137.21: UDP, length 14
10:48:35.039317 IP 84.xx.xx.27.1194 > 67.xx.xx.137.21: UDP, length 14
10:48:37.196800 IP 84.xx.xx.27.1194 > 67.xx.xx.137.21: UDP, length 14
因此数据包到达,但无法连接。Openvpn.conf 是正确的,并且 openvpn 客户端/服务器工作正常,因为如果我替换远程 IP 22和远程 IP 60001一切正常。这个重定向有什么问题?
答案1
为什么不先用 tcpdump,数据包是否确实到达了服务器?中间的防火墙可能导致连接被拒绝。
您的 iptables 行对我来说看起来是正确的。
最好对 OpenVPN 之类的使用特权端口,否则非特权用户可能会使用该端口并造成一些不良后果。
nc-u 67.xx.xx.137 22
并输入一些输入,在没有 openvpn 的情况下进行测试,以确保它正在执行您认为它在执行的操作。通常,如果端口在您输入第一行后关闭,它将关闭,而如果它打开,它将继续接受。当然,它可能会因为您发送了垃圾信息而关闭它,但如果是这种情况,它将出现在 OpenVPN 日志中。