对于没有外网IP的家庭网络,是无法直接从外部访问内部网络中的服务器的。这时候需要用到内网穿透技术。
要实现内网穿透的技术有很多,常见的有Frp内网穿透、ZeroTier虚拟局域网实现内网穿透。Frp方式要多一台外网的虚拟主机实现数据转发,成本较高。
而ZeroTier技术则可以省掉公网服务器的成本,缺点是需要在外网客户端上安装ZeroTier应用。
打开ZeroTier官网:https://www.zerotier.com/,申请账户并登录,点击.NETworks-Create a New Network,网站会自动分配一个Network Id,如e4da7455b2fa7bda,后续会用到。Access Control要选择为PRIVATE,在IPv4 Auto-Assign中选择一个容易记忆带有一颗*的网段,如192.168.192.*,其他位置配置不变。
在ZeroTier官网点击Download,选择外网客户端的操作系统,如macOS。下载完成后安装并启动。点击Open Control Panel,在打开的窗口中输入第一步中获取的Network Id,并点击Join Network。
回到ZeroTier的Network管理页面,刷新下,会在Members中看到一条记录,指刚才的电脑。点击Auth的复选框,并在Name中填写一个可识别的电脑名称。这样,外网的电脑就加入了一个192.168.192.*的虚拟局域网。
重复步骤2中的下载,下载OpenWRT的ZeroTier应用并安装在OpenWRT中。点击VPN-ZeroTier,勾选启动、填入Network ID、勾选NAT,点击保持&应用。
在OpenWRT中点击网络-接口,点击添加新接口。输入新接口的名称,接口类型选择以太网适配器zt开头一项,点击提交。在“接口 - ZEROTIER”页面下点击防火墙设置,选择Lan,点击保持&应用。
在OpenWRT点击网络-防火墙-自定义规则,输入三行文本内容。高亮部分替换为上一步中记录的zt开头的名称。点击重启防火墙。
iptables -I FORWARD -i ztbpao3tej -j ACCEPT
iptables -| FORWARD -o ztbpao3tej -j ACCEPT
iptables -t nat -I POSTROUTING -o ztbpao3tej -j MASQUERADE
重复步骤2中在ZeroTier网站下认证此设备。这样路由器就连接入虚拟局域网了, 如IP为192.168.192.10。
这样,在外网电脑上就可以输入192.168.192.10访问路由器管理页面了。
在ZeroTier网络管理界面,Add Routes,填入路由器真实的内网IP和虚拟的内网IP,点击Submit。
这样,通过内网实际IP地址,外网电脑就能正常访问内网中任意的一台服务器了。