这是我的基础设施:
dns of mydomain.com:
vpn A 90.90.90.1
vpn A 90.90.90.2
client vpn config:
client
dev tun
proto udp
nobind
remote vpn.mydomain.com 1394
server1
net.ipv4.ip_forward = 1
iptables:
FORWARD defaults to ACCEPT
vpn config:
dev tun
topology subnet
port 1394
proto udp
server 10.10.1.0 255.255.255.0
push "route 10.90.90.0 255.255.255.0"
interfaces:
ifpub: 90.90.90.1/24
ifpriv: 10.90.90.1/24
ifvpn: 10.10.1.1/24
routes:
10.10.1.0/24 src 10.10.1.1 dev ifvpn
10.10.2.0/24 via 10.90.90.2 dev ifpriv
server2
net.ipv4.ip_forward = 1
iptables:
FORWARD defaults to ACCEPT
vpn config:
dev tun
topology subnet
port 1394
proto udp
server 10.10.2.0 255.255.255.0
push "route 10.90.90.0 255.255.255.0"
interfaces:
ifpub: 90.90.90.2/24
ifpriv: 10.90.90.2/24
ifvpn: 10.10.2.1/24
routes:
10.10.1.0/24 via 10.90.90.1 dev ifpriv
10.10.2.0/24 src 10.10.2.1 dev ifvpn
问题是,从我的客户端我可以 ping 通我所连接的 OpenVPN 服务器,但不能 ping 通 10.90.90.0/24 子网中的其他服务器。
tcpdump
显示 ICMP 请求从同一台服务器发送到,ifvpn
但ifpriv
ICMP 请求数据包再也没有进一步传输。
向 iptables 添加日志记录还向我显示 ICMP 请求数据包进入 POSTROUTING 状态而未被丢弃,但数据包从未到达其目的地,我不知道这里发生了什么,我没有解决方案。
我知道我可以伪装我的数据包,但我不想这样做,因为这是不可推荐的(https://community.openvpn.net/openvpn/wiki/NatHack),否则这将是我最后的解决方案。
答案1
如果远程服务器“公开子网”,则必须有一个包含带指令ccd
的文件的目录iroute
,如 OpenVPN 文档中详细描述的那样。您还必须将route
指令推送到客户端。
当一切正常时:
- 客户端发送 ping。
- 客户端的操作系统有一个路由命令,可以将此流量发送到本地 OpenVPN 服务器。
- 信息
ccd
告诉 OpenVPN连接到远程发送流量以进行投递。 - 交通从此处远程出现并继续前往目的地。
- 对于回程,远程系统必须还有一个操作系统路由,将流量发送回它是OpenVPN 服务器。