可以当然是可以的,相当于 site2site vpn 了。
ref:
https://openvpn.net/vpn-server-resources/site-to-site-routing-explained-in-detail/但是根据 ov 模式的不同,有不同的具体步骤。看起来是 tap 模式了。tap 模式做这种事情简单地多(相对 tun 而言)
1.
a.如果你的 ov 是 tun 模式
在 ov 服务器上编辑 ccd 配置(假设你用了 net30 )
ifconfig-push 10.8.0.10 255.255.255.252
iroute 192.168.2.0 255.255.255.0
这个 ccd 文件的文件名是你的 openvpn 用户名,位置由 server.conf 里的 client-config-dir 决定。
b. 如果你的 ov 是 tap 模式,跳过这一步。
2. 在 ov 服务器到公网上添加 nat 规则:
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -j MASQUERADE
以及任何你喜欢的 dnat 规则。但是 dnat 的时候有个问题,就是你内网的回包没法回到 openvpn 服务端上去……
解决这个问题的思路有两个:
i. 完成 dnat 之后立刻做一次 snat
iptables -t nat -A PREROUTING -d ${公网 ip} -p tcp --dport 12345 -j DNAT --to 192.168.2.x:12345
iptables -t nat -A POSTROUTING -o tun0 ! -s 10.8.0.0/24 -j SNAT --to 10.8.0.1
缺点是看不到真实的公网 ip 。
ii. 在 192.168.2.1 和 192.168.2.2 上做连接追踪,比这些还复杂,暂不推荐。
3. 在云端网关上(看起来是你那个云服务器,但真的是吗?)上添加路由,将 192.168.2/24 网段丢给 openvpn 的服务端
如果做不到,可以考虑通过 nat+端口映射的方式访问,类似从公网访问。
又或者在网络允许的情况下,在你云端所有的服务器上添加路由。
ip r a 192.168.2.0/24 via 10.8.0.1
a. 如果是 tun 模式
要丢给接口(通常是 tun0 )
ip r a 192.168.2.0/24 dev tun0
b. 如果是 tap 模式
ip r a 192.168.2.0/24 via 10.8.0.1
4. 在家里的网关上(看起来是 192.168.2.1 )添加到云端的路由
ip r a 10.8.0.0/24 via 192.168.2.2
5. 在家里 ov 客户端上添加到云端的路由
讲真这里由服务端下发路由是比较合适的……
a.如果是 tun 模式
ip r a 10.8.0.0/24 dev tun0
b. 如果是 tap 模式
通常可以跳过这一步,如果配置正确,你的 tap0 或类似接口上已经有相关路由。
6. 各处防火墙放行
无非是类似下面的东西
iptables -I FORWARD -s 192.168.2.0/24 -d 10.8.0.0/24 -j ACCEPT
iptables -I FORWARD -d 192.168.2.0/24 -s 10.8.0.0/24 -j ACCEPT
之类的,各处执行……