我有一个云 OpenVPN 服务器,我的目标是能够从连接到此服务器的 OpenVPN 客户端访问我的家庭网络。目前,我有一个 OpenWRT 路由器,它是连接到服务器的 OpenVPN 客户端。
首先,我尝试让我的家庭设备(子网 192.168.1.0/24)能够与 OpenVPN 服务器(ip 10.8.0.1)通信。路由器上启用了正确的路由,我可以从路由器本身 ping 服务器。但是,我家庭网络中的设备无法 ping 服务器。以下是我现在的设置概述:
笔记本电脑(192.168.1.209)-> 路由器(192.168.1.1 和 10.8.0.8)-> OpenVPN 服务器(10.8.0.1)
以下是该命令的结果tcpdump尝试 ping 服务器时,首先从路由器,然后从我的笔记本电脑:
路由器
# tcpdump ip proto \\icmp -i tun0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type RAW (Raw IP), capture size 262144 bytes
20:49:29.967959 IP 10.8.0.8 > 10.8.0.1: ICMP echo request, id 8981, seq 0, length 64
20:49:29.987691 IP 10.8.0.1 > 10.8.0.8: ICMP echo reply, id 8981, seq 0, length 64
20:49:30.970133 IP 10.8.0.8 > 10.8.0.1: ICMP echo request, id 8981, seq 1, length 64
20:49:30.989493 IP 10.8.0.1 > 10.8.0.8: ICMP echo reply, id 8981, seq 1, length 64
20:49:35.314108 IP 192.168.1.209 > 10.8.0.1: ICMP echo request, id 1, seq 130, length 40
20:49:40.061738 IP 192.168.1.209 > 10.8.0.1: ICMP echo request, id 1, seq 131, length 40
20:49:45.062659 IP 192.168.1.209 > 10.8.0.1: ICMP echo request, id 1, seq 132, length 40
20:49:50.062842 IP 192.168.1.209 > 10.8.0.1: ICMP echo request, id 1, seq 133, length 40
服务器
# tcpdump ip proto \\icmp -i tun0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type RAW (Raw IP), capture size 262144 bytes
16:49:29.973530 IP 10.8.0.8 > 10.8.0.1: ICMP echo request, id 8981, seq 0, length 64
16:49:29.973563 IP 10.8.0.1 > 10.8.0.8: ICMP echo reply, id 8981, seq 0, length 64
16:49:30.975078 IP 10.8.0.8 > 10.8.0.1: ICMP echo request, id 8981, seq 1, length 64
16:49:30.975113 IP 10.8.0.1 > 10.8.0.8: ICMP echo reply, id 8981, seq 1, length 64
一开始我以为可能是我服务器上的防火墙配置有问题。不过,tcpdump 似乎应该可以捕获流量在它穿过防火墙之前。所以从我所看到的,OpenVPN 似乎不允许数据包通过,但我找不到任何地方提到 OpenVPN 丢弃来自另一个子网的数据包。如果 OpenVPN 配置有助于解决问题,请告诉我,我会将其包括在内。
编辑:此外,服务器具有通过 10.8.0.8 向 192.168.1.0/24 子网发送流量的路由。如果服务器尝试 ping 笔记本电脑,tcpdump 的输出与上面显示的类似。
答案1
需要在 OpenVPN 服务器配置中添加额外的行,以路由客户端后面的子网。从OpenVPN 示例配置文件:
要将特定的 IP 地址分配给特定的
客户端,或者如果连接客户端
后面有一个私有子网并且也应该具有 VPN 访问权限,
请使用子目录“ccd”获取特定于客户端的
配置文件(有关更多信息,请参阅手册页)。
示例:假设证书通用名称为“Thelonious”的客户端
在其连接机器后面还有一个小子网
,例如 192.168.40.128/255.255.255.248。
首先,取消注释以下几行:
;client-config-dir ccd
;route 192.168.40.128 255.255.255.248然后创建一个文件 ccd/Thelonious,其中包含以下行:
iroute 192.168.40.128 255.255.255.248这将允许 Thelonious 的私有子网
访问 VPN。此示例仅
在您使用路由而非桥接时才有效,即您
使用“dev tun”和“server”指令。
当然,根据设置,客户端需要有某种路由,以便路由子网上的计算机能够与 OpenVPN 服务器通信。
关于此内容的更多信息,请访问OpenVPN 网站