per*_*tus 6 ubuntu static-routes iptables openvpn
这里的软件开发人员,试图通过在 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 | \
+-------------+ \
Run Code Online (Sandbox Code Playgroud)
客户端可以连接到 VPN(甚至在 iPhone 上),但我无法全面了解我需要检查哪些子系统。
以下是我的设置目标:
172.16.0.23
作为其主要 dns 服务器,因为该服务器将 Amazon 生成的主机名解析为内部 ip 地址(即,该服务器ec2-45-67-8-9.eu-west-1.compute.amazonaws.com
解析10.23.45.67
时将解析为,但会解析为45.67.8.9
其他任何地方)这是我的配置方式/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"
Run Code Online (Sandbox Code Playgroud)
但是,我不确定 openvpn 服务器为我做了哪些部分:
您需要在内核 ( /proc/sys/net/ipv4/ip_forward
) 中的 OpenVPN 服务器上启用转发,并且必须在防火墙 (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
Run Code Online (Sandbox Code Playgroud)
如果只是简单的客户端连接,则无需在服务器上设置路由。如果 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
Run Code Online (Sandbox Code Playgroud)
并相应设置变量。假设您可以为 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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5179 次 |
最近记录: |