OpenVPN AS接受由NAT转发的连接

我们正在运行OpenVPN AS服务器,这些服务器可通过公共IP访问和使用。 但是,我们的一些客户端不允许直接访问我们的VPN服务器(因为一些令人讨厌的防火墙pipe理员 – 不要问…)。 为了绕过这个问题,我们想出了一个设置,在虚拟环境中创build一个网关,这个网关将执行一个简单的NAT,将所有包含的连接转发到我们的VPN服务器。

NAT工作正常(服务器上的tcpdump显示与我们网关相同的数据包)。 我们目前的iptables roules是(INPUT,FORWARD和OUTPUT默认设置为ACCEPT):

iptables -t nat -A PREROUTING -p udp --dport 1194 -j DNAT --to-destination $vpn_srv iptables -t nat -A POSTROUTING -j MASQUERADE 

我知道可能有一些进一步的configuration需要,但只要VPN服务器没有响应他肯定收到的数据包,就没有必要增强规则。

每当数据包到达VPN服务器时,服务器就会产生以下日志输出:

 2012-12-31 13:03:29+0000 [-] OVPN 1 OUT: 'Mon Dec 31 13:03:29 2012 TLS Error: incoming packet authentication failed from 123.123.123.123:35077' 2012-12-31 13:03:31+0000 [-] OVPN 1 OUT: 'Mon Dec 31 13:03:31 2012 Authenticate/Decrypt packet error: packet HMAC authentication failed' 

所以我想我们需要告诉VPN服务器接受和回复从这个主机转发的数据包。 我们怎么做?

注意:所有服务器(VPN服务器和NAT网关)都是公共的。

编辑:
没有想法? 我知道可以在防火墙后面运行OpenVPN服务器(简单的NAT和任何家庭networking一样)。 我的设置与那个设置有什么不同?

编辑(10.01.2013):
我们会尝试任何解决scheme,允许我们将vpnstream量从“网关”转发到我们的vpn服务器。 最好使用encryption,因为看起来防火墙扫描将被转储的特定vpn包。

如果你的客户端拥有一个通过DPI阻止OpenVPNstream量和/或某种模式分析的networking防火墙,那么我不确定你能做些什么,而不使用OpenVPN。 我不确定我遵循如何使用额外的网关和NAT(我假设你的非客户端networking?)应该帮助一下。

你可以做的是尝试使用OpenSSH SOCKS或tun(4)function。 (只是由于一些奇怪的原因,只有OpenVPN被阻止,而不是SSH。)

所有主要的ssh实现(通常称为“dynamic端口转发”)都支持SOCKSfunction,它将让您的客户端通过使用-D1080选项的SSH进行连接和身份validation,然后指定localhost:1080作为SOCKS5代理网页浏览器。 安装非常简单(如果用户已经有ssh访问权限,则不需要进行服务器端更改),并且通常可以很好地工作(我始终使用公共networking)。

或者,如果您使用的是UNIX系统,则也可以通过OpenSSHconfigurationtun(4) 。 这是一个相对较新的function,与SOCKS代理相比,它需要额外的configuration,默认情况下已经启用,但是这也是一个不错的select,具体取决于你在找什么。

还有两个端口可以转发,分别是443和943,如OpenVPN上的FAQ所述:

我需要在防火墙的Access Server中打开哪些端口?
简短的回答:TCP 443,TCP 943,UDP 1194

而且,如果这不起作用并且所有的IP都是公共的,你可以尝试删除MASQUERADE,并且让连接从PtP进行,通过你的网关。

如果这些都没有帮助,则可能需要提供更多信息,例如tcpdump摘录,甚至是debugging日志。