我需要设置一个 OpenVPN 网络,该网络在未来几个月内可能会增长到数百个客户端。一些客户端是服务器,其他是需要托管在服务器上的服务的设备。
这个想法是使用一个10.10.0.0/16
所有客户端都接入的网络。服务器应该有一个范围内的静态 VPN IP 10.10.0.1 - 10.10.0.254
,并且应该有范围内的 DHCP VPN IP。OpenVPN10.10.1.1 - 10.10.255.254
服务器(目前为 1)有 IP10.10.0.1
分配静态“服务器”IP,我取消了client-config-dir
OpenVPN 中的注释server.conf
,为 中的每个服务器创建了一个配置文件,ccd
将服务器CN name
作为文件名,并添加了路由10.10.0.0 255.255.0.0
到server.conf
。每个客户端文件都包含类似以下内容:
ifconfig-push 10.10.0.x 10.10.0.1
iroute 10.10.0.0 255.255.0.0
当我尝试10.10.0.1
从具有静态 VPN IP 的其中一个服务器 ping 时,ping 成功。
对于 DHCP 客户端我设置了一些配置server.conf
:
dev tun
proto udp
dev tun
mode server
tls-server
ifconfig 10.10.0.1 255.255.0.0
ifconfig-pool 10.10.1.1 10.10.255.254
route-gateway 10.10.0.1
push "route-gateway 10.10.0.1"
push "route 10.10.0.0 255.255.0.0 10.10.0.1"
客户端正确连接并获取预期范围内的 IP(例如 10.10.1.61),但当我尝试 ping 时10.10.0.1
,ping 超时。当我使用 检查网关时,route -n
我发现设置了错误的网关:
root@somedevice:/home/pi# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.128.60.1 0.0.0.0 UG 202 0 0 eth0
10.10.1.1 0.0.0.0 255.255.255.255 UH 0 0 0 tun0 <-- should be 10.10.0.1 ?
10.128.60.0 0.0.0.0 255.255.255.0 U 202 0 0 eth0
当我手动添加网关时,route add 10.10.0.1 tun0
我可以 ping 通 VPN 服务器。但我仍然无法 ping 通服务器(例如 10.10.0.20)。当我检查时,我注意到缺少routel
一条路由。10.10.0.0/16
root@somedevice:/home/pi# routel
target gateway source proto scope dev tbl
default 10.128.60.1 10.128.60.33 dhcp eth0
10.10.0.1 link tun0
10.10.1.1 10.10.1.2 kernel link tun0
10.128.60.0/ 24 10.128.60.33 dhcp link eth0
10.10.1.2 local 10.10.1.2 kernel host tun0 local
10.128.60.0 broadcast 10.128.60.33 kernel link eth0 local
10.128.60.33 local 10.128.60.33 kernel host eth0 local
10.128.60.255 broadcast 10.128.60.33 kernel link eth0 local
127.0.0.0 broadcast 127.0.0.1 kernel link lo local
127.0.0.0/ 8 local 127.0.0.1 kernel host lo local
127.0.0.1 local 127.0.0.1 kernel host lo local
127.255.255.255 broadcast 127.0.0.1 kernel link lo local
::1 kernel lo
fe80::/ 64 kernel eth0
fe80::/ 64 kernel tun0
::1 local kernel lo local
fe80::65cf:ce3:fc9f:20fa local kernel eth0 local
fe80::c648:ccba:8f47:86b7 local kernel tun0 local
ff00::/ 8 eth0 local
ff00::/ 8 tun0 local
当我手动添加此路由时,ip route add 10.10.0.0/16 via 10.10.0.1
我可以 ping 服务器(例如 10.10.0.20):-D
问题:
- 我如何才能将正确的网关(
10.10.0.1
而不是10.10.1.1
)推送到具有 DHCP 地址的客户端? - 我如何将路由推
10.10.0.0/16 via 10.10.0.1
送到具有 DHCP 地址的客户端?
我以为它已经完成了
push "route-gateway 10.10.0.1"
push "route 10.10.0.0 255.255.0.0 10.10.0.1"
但那不起作用,我做错了什么?
- - - - - - 更新 - - - - - -
我刚刚注意到这一点,push "route-gateway 10.10.0.1"
并将push "route 10.10.0.0 255.255.0.0 10.10.0.1"
网关/路由推送到“静态服务器客户端”,而不是通过 DHCP 接收 VPN IP 的客户端。为什么它们不适用于 DHCP 客户端?
答案1
对于我的客户端(使用 dhcp ips)
port 53
proto udp
dev tun
tls-server
ca …
cert …
key…
dh …
cipher …
auth …
local …
server 10.10.1.0 255.255.255.0
max-clients 253
topology subnet
keepalive 10 120
comp-lzo no
push "comp-lzo no"
user nobody
group nogroup
persist-key
persist-tun
username-as-common-name
…
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 1.1.1.1"
push "redirect-gateway def1"
push "route 10.10.0.0 255.255.0.0 10.10.0.1 1"
或者
push "route 10.10.0.0 255.255.0.0 net_gateway 1"
使用默认客户端的网关。