这里的软件开发人员试图通过在amazon EC2上设置OpenVPN服务器来访问其中的所有内部资源,从而使他的sysadmin-foo启动并运行.以下是我在新的Ubuntu 12.04 Canonical AMI上的设想:
Local network / EC2 Cloud,10.*.*.*/255.0.0.0 172.16.20.*/,' 255.255.255.0,' +-----------------+ .' |Amazon DNS server| |,'| 172.16.0.23 | +---------------+ |,' +-----------------+ | Workstation | |,' | XXX | +-------,'------+ | 172.16.20.1 | XXXX | OpenVPN server| +------`.-------+ \ XX 10.23.45.67 `-. +-------------+ \ '. +---------------+ `-. Second server +--------`.---+ | | 10.23.45.68 | |Local server | \ +-------------+ | 172.16.20.2 | \ +-------------+ \
客户端可以连接到VPN(甚至在iPhone上),但是我无法全面了解我需要检查哪些子系统.
以下是我的设置目标:
> VPN客户端应该能够通过VPN访问内部资源,其余的Internet应该通过本地网关路由
> VPN客户端应该能够访问OpenVPN服务器可以访问的所有服务器
> VPN客户端应使用172.16.0.23的Amazon DNS服务器作为其主DNS服务器,因为该服务器将Amazon生成的主机名解析为内部IP地址(即ec2-45-67-8-9.eu-west-1.compute.当该服务器解析时,amazonaws.com将解析为10.23.45.67,而其他地方则为45.67.8.9)
> VPN客户端应该看到对方
这是我配置/etc/openvpn/server.conf的方式(我希望这只是有趣的部分):
persist-tun server 172.16.10.0 255.255.255.0 push "route-gateway 172.16.10.1" push "route 10.0.0.0 255.0.0.0" push "route 172.16.0.23" push "dhcp-option DNS 172.16.0.23"
但是,我不确定这些openvpn服务器的哪些部分对我有用:
>我是否需要在服务器上配置iptables?如果是这样,怎么样?
>我是否需要在服务器上设置路由(除了被推送到客户端的路由)?如果是这样,哪个以及如何?
>我遗漏了哪些其他网络软件导致我的客户无法成功连接?
您需要在内核中的OpenVPN服务器上启用转发(/ proc / sys / net / ipv4 / ip_forward),并且您必须全局或有选择地允许在防火墙(iptables)中转发,例如:
# there is probably already a rule allowing all established connections # iptables -A FORWARD -m conntrack --ctstate ESTABLISHED -j ACCEPT # the next rules for every OpenVPN interface (or once for the respective address block) iptables -A FORWARD -i tun0 -d 10.0.0.0/8 -j ACCEPT iptables -A FORWARD -i tun0 -d 172.16.0.23 -j ACCEPT # if the local network shall be accessible # iptables -A FORWARD -i tun0 -d 172.16.20.0/24 -j ACCEPT
如果只是简单的客户端连接,则无需在服务器上设置路由.如果172.16.20.1连接为本地网络的网关,则需要172.16.20.0/24的路由,但这可能(并且最好)在172.16.20.1的OpenVPN配置中设置.
编辑1
如果您无法在某些系统上配置路由,并且它们的路由不会以正确的方式发送流量,那么您需要NAT(更精确:SNAT):
iptables -t nat -A POSTROUTING -d $PROBLEM_HOST_IP \! -s $LOCAL_IP \ -j SNAT --to-source $LOCAL_IP
相应地设置变量.假设您可以在172.16.20.0/24中为目标设置正确的路由,那么您可以通过这种方式更轻松地执行此操作:
iptables -t nat -I POSTROUTING 1 -s $LOCAL_IP -j ACCEPT iptables -t nat -I POSTROUTING 2 -d 172.16.20.0/24 -j ACCEPT iptables -t nat -I POSTROUTING 3 -j SNAT --to-source $LOCAL_IP