站点到站点 OpenVPN 问题

站点到站点 OpenVPN 问题

所以我的最终目标是利用 OpenVPN 连接到远程 IP 摄像机。我选择 OpenVPN 的原因是尝试克服运营商级 NAT,它阻止我进行端口转发和拥有静态 IP,而无需每月支付 $$$ 的费用。

下面是拓扑结构的样子,现在我可以从站点 B 和 C ping 站点 A LAN(192.168.1.0)上的设备,这很好,证明 VPN 正在运行。

但是我无法从站点 A 或站点 B(我的最终目标)ping 位于站点 B(192.168.2.0)的 IP 摄像头。

我仍然不能 100% 确定我的配置是否正确或者我是否遗漏了某些东西。

OpenVPN 服务器(Debian 8)和 Raspberry Pi 上都启用了 net.ipv4.ip_forward=1。

我正在考虑的另一件事是我是否需要将 IP 摄像机的默认网关设置为 Raspberry Pi 的 IP?

拓扑:

在此处输入图片描述

服务器配置

port 1194
proto udp
dev tun
topology subnet
mode server
tls-server
server 10.8.0.0 255.255.255.0
push "dhcp-option DNS 8.8.8.8"
client-config-dir ccd
client-to-client
route 192.168.2.0 255.255.255.0 10.8.0.3
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/server.crt
key /etc/openvpn/easy-rsa/keys/server.key
dh /etc/openvpn/easy-rsa/keys/dh2048.pem
keepalive 10 120
comp-lzo
user nobody
group nogroup
daemon
tls-auth /etc/openvpn/easy-rsa/keys/ta.key 0
cipher AES-128-CBC
comp-lzo
persist-key
persist-tun
status /var/log/openvpn-status.log 20
log /var/log/openvpn.log
verb 3

在/etc/openvpn/ccd/flexo_client中

push "route 192.168.1.0 255.255.255.0 10.8.0.1"
iroute 192.168.2.0 255.255.255.0[/oconf]

客户端配置

client
dev tun
proto udp
remote x.x.x.x 1194
resolv-retry infinite
nobind
persist-key
persist-tun
mute-replay-warnings
ns-cert-type server
key-direction 1
cipher AES-128-CBC
comp-lzo
verb 1
mute 20
topology subnet
ca - XML
cert - XML
key -XML
tls-auth - XML

OpenVPN 服务器上的路由表 - 站点 A

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use   Iface
0.0.0.0         192.168.1.254   0.0.0.0         UG    0      0        0 eth0
10.8.0.0        0.0.0.0         255.255.255.0   U     0      0        0 tun0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.2.0     10.8.0.3        255.255.255.0   UG    0      0        0 tun0

Raspberry Pi 路由表 - 站点 B

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use      Iface
0.0.0.0         192.168.2.1     0.0.0.0         UG    303    0        0 wlan0
10.8.0.0        0.0.0.0         255.255.255.0   U     0      0        0 tun0
192.168.2.0     0.0.0.0         255.255.255.0   U     303    0        0 wlan0

编辑:

路由器上的静态路由(192.168.1.254)- 站点 A

Destination     Gateway         Genmask
192.168.2.0     192.168.1.143   255.255.255.0
10.8.0.0        192.168.1.143   255.255.255.0

答案1

我正在考虑的另一件事是,我是否需要将 IP 摄像机的默认网关设置为 Raspberry Pi 的 IP?

是的。只有 Raspberry Pi 知道将针对 VPN 的流量发送到哪里。

另一个选项是在 Raspberry Pi 上使用 SNAT/MASQUERADE 设置 iptables,这样来自 VPN 网络的每个连接的源 IP 都会设置为 Raspberry Pi IP。

答案2

将 IP 摄像头的默认网关设置为 Raspberry Pi 的 IP 至少应该可以从 vpn 子网访问它(如果您无法在路由器上定义路由,则作为最后的解决办法)。作为替代方案,如果可能的话,您也可以将下面(站点 B)的路由添加到 IP 摄像头。

从网络角度来看,将路由添加到路由器的路由表更为简洁,这将使整个网络不仅可以访问 IP 摄像机,还可以相互访问。

只是为了确保(这发生在我身上),请检查 Debian 服务器或 Raspberry Pi 上没有任何冲突的防火墙规则。

我已经测试了你的配置,如果你添加这些路线,它应该可以工作:

向站点 B 的路由器添加路由

Destination        Gateway             Genmask
192.168.1.0        192.168.2.254       255.255.255.0
10.8.0.0           192.168.2.254       255.255.255.0     (optional)

仅当 openvpn 服务器计算机上的任何其他服务需要访问站点 B 上的客户端或站点 B 上的客户端需要10.8.0.1直接通过 IP 访问这些服务时,才需要第二条路由。

在站点 A 的路由器上添加路由

Destination        Gateway             Genmask
192.168.2.0        192.168.1.143       255.255.255.0
10.8.0.0           192.168.1.143       255.255.255.0     (optional)

仅当 Raspberry Pi 上的任何其他服务需要访问站点 A 上的客户端或站点 A 上的客户端需要10.8.0.3直接通过 IP 访问这些服务时,才需要第二条路由。

由于我的 openvpn 服务器在路由器机器上运行,因此我无法完全测试站点 A 上的路由。

解释:当 IP 摄像机(或站点 B 上的任何其他客户端)从 openvpn 子网或站点 A 子网获取数据包时,它没有到这些子网的路由,并将响应路由到其默认网关(路由器站点 B)。此网关(如果它知道这些路由)将数据包路由到下一个“网关”(Raspberry Pi)。

将固定 IP 推送到你的 Raspberry Pi,通过将以下行添加到您的/etc/openvpn/ccd/flexo_client文件(假设flexo_client是您的 Pi 的证书 CN 名称):

ifconfig-push 10.8.0.3 255.255.255.0

否则,如果您的 Pi 获得不同的 IP 地址,您可能会失去连接,因为您的路由不再正确。

以下是对您的 openvpn 配置的一些额外提示,但它们不会对您的问题产生任何影响。

在服务器配置中指令

mode server
tls-server

不是必需的,因为它们由server 10.8.0.0 255.255.255.0指令暗示并扩展如下(参见手册页):

mode server
tls-server
push "topology subnet"
ifconfig 10.8.0.1 255.255.255.0
ifconfig-pool 10.8.0.2 10.8.0.254 255.255.255.0
push "route-gateway 10.8.0.1"

此外,push "dhcp-option DNS 8.8.8.8"除非您确实需要,否则不应强制执行该指令,因为连接到您的 openvpn 服务器的客户端应从其 DHCP 服务器获取 DNS 选项。它只对 Windows 客户端有效,在非 Windows 客户端上,它将保存在环境变量中,以供在 up 脚本中可选使用。

daemon指令也不应该被要求(如果我错了请纠正我),因为它会导致所有消息和错误输出被发送到 syslog 工具,这不会产生任何影响,因为该log指令正在取代它。有关详细信息,请参阅手册页。

在客户端配置中替换指令

ns-cert-type server

经过

remote-cert-tls server

如果可能的话,因为这是弃用的行为,并且默认情况下 Easy-RSA 3 不启用它,除非您在使用 CA 签署证书之前启用“Netscape”扩展。请参阅openvpn 维基

相关内容