Openvpn-openvpn 服务器后面的 LAN 无法连接到 openvpn 客户端后面的 LAN

Openvpn-openvpn 服务器后面的 LAN 无法连接到 openvpn 客户端后面的 LAN

我有以下情况:

在此处输入图片描述

服务器 C 和服务器 D 可以正常连接到服务器 A 和服务器 B,但服务器 B 和服务器 A 无法连接到服务器 C 和服务器 D。

我发现有些人遇到了同样的问题,但没有得到解决。

这是我的 openvpn 客户端配置:

auth-nocache
ca /etc/openvpn/client/ca.crt
cert /etc/openvpn/client/client.crt
cipher AES-256-CBC
client
comp-lzo no
dev tun0
group nogroup
key /etc/openvpn/client/client.key
nobind
persist-key
persist-tun
proto udp
pull-filter ignore "redirect-gateway"
remote REDACTED
remote-cert-tls server
reneg-sec 86400
user nobody
verb 3

这是我的服务器配置:

ca /etc/openvpn/keys/ca/pki/ca.crt
cert /etc/openvpn/keys/server/client.crt
cipher AES-256-CBC
comp-lzo no
dev tun0
dh /etc/openvpn/keys/ca/pki/dh.pem
ifconfig-pool-persist /tmp/ipp_udp.txt
keepalive 5 15
key /etc/openvpn/keys/server/client.key
local REDACTED
max-clients 10
mute 10
persist-key
persist-tun
port 1149
proto udp
push "redirect-gateway def1 bypass-dhcp"
push "route 172.16.254.0 255.255.255.0"
rcvbuf 0
reneg-sec 86400
server 172.19.0.0 255.255.255.0
user nobody
verb 3

如果我连接到 openvpn 服务器并尝试 ping openvpn 客户端的 tun0 ip,它可以工作,但如果我尝试 ping 172.16.0.1(openvpn 客户端上的另一个 IP),它会失败,奇怪的是,我甚至看不到从 openvpn 客户端上的 tun0 接口传入的 ICMP 数据包。

如果有人能帮助我完成这个配置我会非常高兴。

答案1

您必须使用client-config-dirclient-connect脚本来为该客户端生成连接配置。第一种方法比较简单,我将对其进行描述。man openvpn如果您愿意,您还应该阅读(很长的一页,软件的综合手册)以了解所有详细信息并了解如何编写脚本。

在某处创建目录;我通常将名为“X”的 VPN 的所有附加文件(证书、密钥、crl、模块等)放入其中,/etc/openvpn/server/X因此这自然就变成了/etc/openvpn/server/X/ccd。在 VPN 服务器中添加:

route 172.16.0.0 255.255.255.0
client-config-dir /path/to/ccd

在此目录中,放置以客户端证书通用名称命名的配置文件。(我不是已经告诉过每个客户端必须有自己独特的通用名称,因此有独特的证书,并且应该从 OpenVPN 中删除危险的 duplicate-cn 指令?)好吧,如果证书中的客户端 CN 是someclient,则创建一个文件/path/to/ccd/someclient并在其中放入至少以下行:

iroute 172.16.0.0 255.255.255.0

route指令是添加路线的命令操作系统,因此当服务器启动时,它会告诉操作系统,当它看到发往该网络的数据包时,它应该将其路由到 VPN。如果您有其他客户端需要与该客户端的 LAN 进行通信,您也需要push相同的路由命令。

server指令使 OpenVPN 进程本身成为具有自己的路由表的附加 IP 路由器。通常,它仅包含从参数中指定的子网到 VPN 内部对等地址的路由server,但在这种情况下,您需要告诉它通过特定客户端路由附加网络iroute为特定客户指定,告诉它路由提供的网络对那个客户您可以使用管理服务器(management指令)status命令或定期状态文件转储(status指令)来查看此内部路由表。

相关内容