iptables REDIRECT + openvpn问题

我想redirect连接到端口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 

我将服务器端口22redirect到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 1replace远程IP 22

 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 60001replace远程IP 22所有的作品。 这个redirect有什么问题?

为什么不从tcpdump开始,数据包是否完全到达服务器呢? 它之间的防火墙可能导致连接被拒绝。

你的iptables线路对我来说是正确的。

最好使用像OpenVPN这样的特权端口,否则非特权用户可能会使用该端口并导致一些坏习惯。

nc -u 67.xx.xx.137 22

并input一些input,在没有openvpn的情况下进行testing,以确保它按照您的想法执行。 通常情况下,如果端口已closures,则在第一行input之后它将closures,而如果打开它将继续接受。 当然,它可能会closures它,因为你发送垃圾,但如果是这样的话,这将出现在OpenVPN日志。