我目前正在尝试配置 OpenVPN 以远程访问我们的公司网络。
我能够建立连接并 ping 配置地址(10.8.0.1)上的服务器,但是我无法从客户端访问服务器端的网络。
该服务器配置为使用以下方式推送路由到服务器:
push "route 155.0.0.0 255.255.0.0 10.8.0.1 1"
其中 155.0.0.0/16 是服务器端网络。
这没有用所以我添加了
push "route 155.0.0.68 255.255.255.255 net_gateway 1"
因为我读到过一些文章说,如果所有数据包(包括发往服务器 (155.0.0.68) 的数据包)都通过隧道路由,那么就会出现问题,但这仍然不起作用。我无法 ping 通服务器网络上的任何地址。甚至 155.0.0.68 上的服务器本身也无法 ping 通。
我究竟做错了什么?
附加信息:客户端和服务器运行 Windows,OpenVPN 以 tun 模式运行,使用 udp 协议。客户端和服务器上的防火墙均已关闭。
我已经在网络工程上问过这个问题,但有人告诉我 ServerFault 是解决此类问题的更好的地方。
答案1
需要 VPN 隧道两侧的路由。
此外,服务器上还必须启用 IP 路由。例如在 Windows 7 上:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"IPEnableRouter"=dword:00000001
假设以下 IP 和子网:
- 客户端子网
192.168.0.0/24
- 客户端 IP
192.168.0.2
- 客户端 VPN IP
10.8.0.2
- 服务器端子网
155.0.0.0/16
- 服务器 IP
155.0.0.68
- 服务器 VPN IP
10.8.0.1
按键
为服务器和客户端创建一组密钥。查看 OpenVPN 安装目录中的 README..\OpenVPN\easy-rsa\README.txt
以获取有关如何生成这些密钥的说明。
服务器端配置
将以下行添加到服务器配置文件:
port 1194
proto udp
dev tun
topology subnet
server 10.8.0.0 255.255.255.0
client-config-dir C:\\OpenVPN\\config\\ccd
route 192.168.0.0 255.255.255.0 10.8.0.2
ca C:\\OpenVPN\\config\\ca.crt
cert C:\\OpenVPN\\config\\server.crt
key C:\\OpenVPN\\config\\server.key
dh C:\\OpenVPN\\config\\dh1024.pem
keepalive 10 60
comp-lzo
persist-key
persist-tun
status C:\\OpenVPN\\config\\openvpn-status-tun.log 20
log C:\\OpenVPN\\config\\openvpn-tun.log
verb 3
将路径替换为相应的安装目录。
在服务器上添加自定义客户端配置文件:
ccd
在与服务器配置文件相同的目录中创建一个目录,并在其中创建一个以中国(通用名称) 的客户端证书。
检查客户端证书并查找此行(CN=<client_name>
):
Subject: C=CH, ST=State, L=City, O=org, OU=unit, CN=client1/name=EasyRSA/emailAddress=root@localhost
在此示例中,文件将被命名client1
(不带扩展名),将以下行添加到文件:
ifconfig-push 10.8.0.2 255.255.255.0
push "route 155.0.0.0 255.255.0.0 10.8.0.1"
iroute 192.168.0.0 255.255.255.0
ifconfig-push
将为该客户端提供静态 IPpush "route ..."
将到达服务器端子网的路由推送到客户端iroute
在 OpenVPN 中生成到客户端子网的内部路由
客户端配置
将以下行添加到客户端配置文件:
client
dev tun
proto udp
remote 155.0.0.68 1194
resolv-retry infinite
nobind
persist-key
persist-tun
comp-lzo
ca C:\\OpenVPN\\config\\client1.crt
cert C:\\OpenVPN\\config\\client1.crt
key C:\\OpenVPN\\config\\client1.key
remote-cert-tls server
用您的安装目录替换路径。
附加航线
如果运行 OpenVPN 的服务器也是路由器,并且将其设置为default-gateway
服务器端子网上的所有客户端,则此设置有效。
如果存在专用路由器,则向其添加以下静态路由(或在所有客户端上添加它们)以到达 VPN 子网和 子网client1
。
静态服务器端子网路由:
Destination Gateway Genmask
192.168.0.0 155.0.0.68 255.255.255.0
10.8.0.0 155.0.0.68 255.255.255.0
有关此主题的更多提示,请参阅这个答案。
答案2
因为您的清洁不知道如何到达另一边,所以您需要这样的东西:
VPN 客户端:
route add -net 192.168.0.0/24 gw 10.8.0.1 1 #in this way, the client knows, how to reach the other side.
远程局域网(服务器端),如果我想访问我的 VPN 服务器端的一台电脑:
route add -net 10.0.0/16 gw "192.168.0.100(local lan ip of my vpn server)"` #in this way, the other pc knows, where to route the traffic for the vpn network
抱歉,对于命令,但我不使用 Windows
答案3
如果您的客户端运行的是 Windows 7,那么您必须以管理员权限运行开放式 VPN 客户端,否则路由表将不会被填充,并且您可能无法 ping 服务器网络上的主机。