使用 OpenVPN 访问家庭内网
本文记录了如何使用 OpenVPN 访问家庭内网。
网络概况
- 宽带是电信宽带,分配了动态的公网
IP。 - 光猫使用桥接模式,通过路由器拨号上网(
PPPoE),路由器局域网为192.168.3.0/24。 - 一台
Windows 10主机,在路由器局域网上的IP192.168.3.120。 Windows 10主机上运行Vmware虚拟机,网络采用NAT模式。子网为192.168.46.0/24。运行了Linux主机,IP192.168.46.128。Windows 10主机在子网中的IP为192.168.3.1。
| 子网 | Windows 10 主机 | Linux 主机 | 客户端 |
|---|---|---|---|
| 路由器 192.168.3.0/24 | 192.168.3.120 | - | - |
| Vmware NAT 192.168.46.0/24 | 192.168.46.1 | 192.168.46.128 | - |
| VPN 10.8.0.0/24 | 10.8.0.1 | - | 10.8.0.6 |
目标和考虑因素
- 能从公网访问家庭内网,包括
Windows 10主机和虚拟机上的Linux主机。 - 不想通过路由器的
NAT功能直接将局域网上的设备映射到公网。一是为了安全,二是为了避免运营商审查。 - 已经使用
ZeroTier将所需设备组建在一个局域网当中作为备选方案。 - 想利用公网
IP以及上行带宽尝尝鲜。 - 想要能直连虚拟机上的
Linux主机,而不是通过Vmware的NAT映射。否则每次新增服务都要设置NAT,修改Windows Defender的端口暴露规则。
实现过程
在 Windows 10 上安装 OpenVPN 服务器
见 在 Windows 10 上安装 OpenVPN 服务器。
在 iOS 和 macOS 上安装 OpenVPN 客户端
见 在 iOS 和 macOS 上安装 OpenVPN 客户端。
客户端访问服务端其他的私有子网
如果在所需的每一个设备上都安装 OpenVPN,将它们连接在 VPN 的子网 10.8.0.0/24 中,也是可以满足需求的,但是这样略有些麻烦。
server.ovpn 新增配置
在 server.ovpn 配置文件中新增一行配置,这个配置的意思是将该路由配置统一推送给客户端,让它们可以访问服务端的其他私有子网。相当于将服务端的其他私有子网的情况告知客户端,这样客户端就知道发往 192.168.46.128 的 Packet 是发向哪里的。
1 | push "route 192.168.46.0 255.255.255.0" |
打开 Windows 10 主机的路由转发功能
Win + R输入regedit打开注册表。- 找到
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters,修改IPEnableRouter为1。 - 重启主机
为虚拟机上的 Linux 主机新增路由
在终端中输入命令,这是为了让 OpenVPN 服务端的其他私有子网上的设备知道来自 10.8.0.0/24 的 Packet 应该路由回 OpenVPN 服务端。
1 | route add -net 10.8.0.0/24 gw 192.168.46.1 |
参考链接
透过openvpn来访问内网资源
OpenVPN 路由详解
OpenVPN中的另一个路由问题 - 在VPN上无法访问本地计算机
openvpn添加本地路由表
windows开启路由转发
linux route命令的使用详解
Windows命令行route命令使用图解