设置说明:
- 一个名为 vpn1 的 VPN 服务器
- 一个名为 vpn2 的 VPN 客户端
- vpn1 后面有一个网络,IP 地址为 10.0.0.0/24
- vpn2 后面有一个网络,IP 地址为 10.0.2.0/24
- 为简单起见,VPN 盒现在是其 LAN 中机器的默认网关
服务器配置:vpn1
mode server
tls-server
dev tun
local PUBLIC-IP-HERE
port 1194
proto udp
persist-key
persist-tun
# Certificates and encryption
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
tls-auth /etc/openvpn/easy-rsa/keys/ta.key 0
cipher BF-CBC
comp-lzo
push "route 10.0.0.0 255.255.255.0"
push "route 10.0.2.0 255.255.255.0"
push "route 10.255.254.0 255.255.255.0"
route 10.0.2.0 255.255.255.0
client-to-client
max-clients 30
user nobody
group nogroup
keepalive 10 120
status /var/log/openvpn-status.log
verb 3
ifconfig-pool-persist ipp.txt
client-config-dir ccd
server 10.255.254.0 255.255.255.0
push "explicit-exit-notify 3"
在 ccd/client 中我有:
iroute 10.0.2.0 255.255.255.0
ifconfig-push 10.255.254.9 10.255.254.10
“ip a”的样子:
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
inet 10.0.0.1/24 brd 10.0.0.255 scope global eth1
172: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 100
link/none
inet 10.255.254.1 peer 10.255.254.2/32 scope global tun0
“ip r” 的样子(我删除了默认路由,因为它不重要):
10.0.0.0/24 dev eth1 proto kernel scope link src 10.0.0.1
10.0.2.0/24 via 10.255.254.2 dev tun0
10.255.254.0/24 via 10.255.254.2 dev tun0
10.255.254.2 dev tun0 proto kernel scope link src 10.255.254.1
客户端配置:vpn2
client
dev tun
remote PUBLIC-IP-HERE 1194
nobind
persist-key
persist-tun
proto udp
ca /etc/openvpn/easy-rsa/keys/client/ca.crt
cert /etc/openvpn/easy-rsa/keys/client/client.crt
key /etc/openvpn/easy-rsa/keys/client/client.key
tls-auth /etc/openvpn/easy-rsa/keys/client/ta.key 1
cipher BF-CBC
comp-lzo
ns-cert-type server
verb 3
“ip a”的样子:
7: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
inet 10.0.2.1/24 brd 10.0.2.255 scope global br0
8: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 100
link/none
inet 10.255.254.9 peer 10.255.254.10/32 scope global tun0
“ip r” 的样子(我再次删除了默认网关和相关内容):
10.0.0.0/24 via 10.255.254.10 dev tun0
10.0.2.0/24 dev br0 proto kernel scope link src 10.0.2.1
10.255.254.0/24 via 10.255.254.10 dev tun0
10.255.254.10 dev tun0 proto kernel scope link src 10.255.254.9
常规配置:
- Iptables 策略允许一切
- 已启用 IP 转发
- RP 过滤器已禁用
有效的方法:
- 从 lan1 中的任意主机 ping 到 vpn2 ( 10.0.0.11 -> 10.255.254.9 )
- 从 lan2 中的任意主机 ping 到 vpn1 ( 10.0.2.11 -> 10.255.254.1 )
- 从 vpn1 ping 到 lan2(10.255.254.1 -> lan2 中的任何主机 10.0.2.0/24)
- 从 vpn2 ping 到 lan1(10.255.254.9 -> lan2 中的任何主机 10.0.0.0/24)
无效的方法:
- 从 lan1 中的任意主机 ping lan2
- 从 lan2 中的任意主机 ping lan1
通过 NAT,我可以:
- 从 lan1 中的任意主机 ping lan2
- 但不能从 lan2 中的任何主机到 lan1 但不能从 lan2 中的任何主机到 lan1
我应该能够从 LAN1 ping LAN2 中的任何主机,而无需 NAT,反之亦然。这里出了什么问题?有些东西我没搞清楚,但我不知道是什么。
答案1
这是一个路由问题。
我怀疑您的 iroute 指令没有生效。您命名为“ccd/client”的文件实际上必须具有与客户端证书的主题名称相对应的文件名。因此,如果客户端证书的 DN 是C=CA,O=Foo Ltd,CN=Example
,则文件应该是“ccd/Example”。
除此之外,您的配置看起来正确。