网络拓扑是这样的:
OpenVPN 服务器:
Private IP (eth0): 10.0.4.23/16
Public IP (eth1): 77.20.30.40/24
Routes:
default via 77.20.30.1
10.0.0.0/16 (not routable, so no gateway)
10.8.0.0/16 via 10.0.0.65
在同一个私有子网上,我们为通过 OpenVPN 连接的客户端提供了 10.0.13.0/24 网络范围内的专用地址。因此客户端将 OpenVPN 服务器地址视为 10.0.13.1 作为网关。
客户端机器:
Public IP: 217.40.50.60
目前,当客户端连接到 VPN 服务器时,它无法看到私有范围内的子网。因此,我使用 OpenVPN 服务器 tun0 IP (10.0.13.1) 添加了到这些网络的路由
ip r add 10.0.0.0/16 via 10.0.13.1
ip r add 10.8.0.0/16 via 10.0.13.1
它不起作用。所以我在 OpenVPN 服务器上添加了 POSTROUTING iptables 规则
iptables -A POSTROUTING -s 10.0.13.0/24 -o eth0 -j MASQUERADE
那时它奏效了。但是,问题是,例如,当我连接到该私有子网中的服务器时10.0.4.20
,该服务器会将原始 IP 地址视为 OpenVPN 私有地址10.0.4.23
。
目前我们已经建立了 Microsoft VPN,当我们使用它时,所有服务器都可以看到由 VPN 分配的客户端 IP 地址,因此可以完成(也许)但我不确定我哪里弄错了。
这是 OpenVPN Server 配置文件,为了方便读者,去掉了注释。
port 1194
proto udp
dev tun
user nobody
group nobody
persist-key
persist-tun
keepalive 10 120
topology subnet
server 10.0.13.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "dhcp-option DNS 10.0.0.1"
push "dhcp-option DNS 10.0.0.2"
push "route 10.0.0.0 255.255.0.0"
push "route 10.8.0.0 255.255.0.0"
dh none
ecdh-curve prime256v1
tls-crypt tls-crypt.key 0
crl-verify crl.pem
ca ca.crt
cert server_oy94rAaIiMtrnvAB.crt
key server_oy94rAaIiMtrnvAB.key
auth SHA256
cipher AES-128-GCM
ncp-ciphers AES-128-GCM
tls-server
tls-version-min 1.2
tls-cipher TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256
status /var/log/openvpn/status.log
log /var/log/openvpn/openvpn.log
verb 3
plugin /opt/openvpn-ldap-auth/lib/openvpn-auth-ldap.so /etc/openvpn/auth/ldap.conf
client-cert-not-required
我尝试设置server 10.0.13.0 255.255.255.0
为server 10.0.13.0 255.255.0.0
应该是网络,但 OpenVPN 服务器不喜欢该配置,并且如果子网中的第一个八位字节不是,则不想启动0
。
所以为了简单起见:我如何制作一些位于 10.0.0.0/16 网络上的服务器,访问位于 10.0.13.0/24 上的 VPN 客户端。或者更好的是,我如何让 OpenVPN 服务器分配给 10.0.13.0/24 范围内的客户端 IP 地址,但实际上让它们属于 10.0.0.0/16?我可能需要在同一台服务器上安装单独的 DHCP 服务器吗?