我正在运行只有一个 NIC 的 OpenVPN 服务器。
这是我当前的布局:
public.ip > Cisco firewall > lan.ip > OpenVPN server
lan.ip = 192.168.22.70
思科防火墙将请求转发到 oVPN 服务器,因此到目前为止一切正常,客户端能够连接。
但是,所有连接的客户端都应该能够访问 3 个网络:
lan1: 192.168.200.0 (vpn lan) > tun0
lan2: 192.168.110.0 (office lan) > eth1 (gw 192.168.22.1)
lan3: 192.168.22.0 (server lan) > eth1 (broadcast network)
因此 tun0 被映射到 eth1。
Iptables 输出:
# iptables-save
# Generated by iptables-save v1.4.2 on Wed Feb 16 14:14:20 2011
*filter
:INPUT ACCEPT [327:26098]
:FORWARD DROP [305:31700]
:OUTPUT ACCEPT [291:27378]
-A INPUT -i lo -j ACCEPT
-A INPUT -i tun0 -j ACCEPT
-A INPUT -i ! tun0 -p udp -m udp --dport 67 -j REJECT --reject-with icmp-port-unreachable
-A INPUT -i ! tun0 -p udp -m udp --dport 53 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -d 192.168.200.0/24 -i tun0 -j DROP
-A FORWARD -s 192.168.200.0/24 -i tun0 -j ACCEPT
-A FORWARD -d 192.168.200.0/24 -i eth1 -j ACCEPT
COMMIT
# Completed on Wed Feb 16 14:14:20 2011
# Generated by iptables-save v1.4.2 on Wed Feb 16 14:14:20 2011
*nat
:PREROUTING ACCEPT [302:26000]
:POSTROUTING ACCEPT [3:377]
:OUTPUT ACCEPT [49:3885]
-A POSTROUTING -o eth1 -j MASQUERADE
COMMIT
# Completed on Wed Feb 16 14:14:20 2011
然而,客户端无法 ping 任何 IP(包括 192.168.200.1,即 oVPN 的 IP)
当机器使用 2 个 NIC 直接连接到互联网时,可以通过在 oVPN 客户端的配置中伪装和添加静态路由来轻松解决问题。
但是,由于伪装不接受虚拟接口(eth0:0等),我无法再次使伪装工作(并且我甚至不确定是否需要虚拟接口)。
谢谢。
编辑:
OpenVPN 服务器:
# ifconfig
eth1 Link encap:Ethernet HWaddr ba:e6:64:ec:57:ac
inet addr:192.168.22.70 Bcast:192.168.22.255 Mask:255.255.255.0
inet6 addr: fe80::b8e6:64ff:feec:57ac/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:6857 errors:0 dropped:0 overruns:0 frame:0
TX packets:4044 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:584046 (570.3 KiB) TX bytes:473691 (462.5 KiB)
Interrupt:14
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:334 errors:0 dropped:0 overruns:0 frame:0
TX packets:334 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:33773 (32.9 KiB) TX bytes:33773 (32.9 KiB)
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:192.168.200.1 P-t-P:192.168.200.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
客户端上的 ifconfig:
# ifconfig
eth0 Link encap:Ethernet HWaddr 00:22:64:71:11:56
inet addr:192.168.110.94 Bcast:192.168.110.255 Mask:255.255.255.0
inet6 addr: fe80::222:64ff:fe71:1156/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3466 errors:0 dropped:0 overruns:0 frame:0
TX packets:1838 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:997924 (974.5 KiB) TX bytes:332406 (324.6 KiB)
Interrupt:17
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:37847 errors:0 dropped:0 overruns:0 frame:0
TX packets:37847 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2922444 (2.7 MiB) TX bytes:2922444 (2.7 MiB)
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:192.168.200.30 P-t-P:192.168.200.29 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:689 errors:0 dropped:18 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 B) TX bytes:468778 (457.7 KiB)
wlan0 Link encap:Ethernet HWaddr 00:16:ea:db:ae:86
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:704699 errors:0 dropped:0 overruns:0 frame:0
TX packets:730176 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:520385963 (496.2 MiB) TX bytes:225210422 (214.7 MiB)
客户端配置末尾的静态路由行(我一直在研究 192.168.200.0 --(取消)注释以查看是否有任何变化):
route 192.168.200.0 255.255.255.0
route 192.168.110.0 255.255.255.0
route 192.168.22.0 255.255.255.0
VPN 客户端上的路由:
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.200.29 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
192.168.22.0 192.168.200.29 255.255.255.0 UG 0 0 0 tun0
192.168.200.0 192.168.200.29 255.255.255.0 UG 0 0 0 tun0
192.168.110.0 192.168.200.29 255.255.255.0 UG 0 0 0 tun0
192.168.110.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 192.168.110.1 0.0.0.0 UG 0 0 0 eth0
编辑:
奇怪的是,如果我设置
push "redirect-gateway def1"
在服务器配置中,(从而通过 VPN 路由所有流量,这不是我想要的),它似乎有效。
答案1
我发现这里有两个可能的问题。首先,您的 OpenVPN 客户端可能无法从 OpenVPN 配置中获取到 LAN 的静态路由。其次,您的 OpenVPN 服务器似乎不是 LAN 主机的默认网关。因此,您应该添加另一条规则以iptables
允许数据包正确路由回您的 OpenVPN 服务器。如下所示:
-A POSTROUTING -o eth1 -j SNAT -s 192.168.200.0/24 -d 192.168.22.0/24 --to-source 192.168.22.70
我假设 192.168.22.70 是您的 OpenVPN 服务器的 LAN 地址。
答案2
显然,VPN 在办公室外一直在运行。
它只是没有为 192.168.110.0 网络(办公室)内的人们路由任何内容。
vpn.domain.tld 指向 LAN 中的 192.168.22.70。
通过将 vpn.domain.tld 更改为指向 VPN 服务器的公共 IP 地址,问题得到了解决,这有点奇怪。
我所说的公共 IP 地址是指映射到 Cisco 防火墙 (91.220.102.x) 的地址,所有数据包都转发到 VPN 的 LAN IP (192.168.22.70)(请参阅我原始帖子中的布局)。
办公室不需要 VPN,但由于 VPN 在 Windows 机器上作为服务启动,我还无法控制它何时启动以及何时不启动(理想情况下仅在办公室外启动 - 但那是以后的事了)。
感谢您的所有帮助。