对于家宽没有公网 IP 的情况,想要访问家里的 NAS 等设备就需要进行内网穿透。开源的 frp、nps 等工具可以方便地实现内网穿透,但目前这些工具的 P2P 穿透能力较差,强烈依赖于服务端的进出口带宽,而 ZeroTier 可以实现内网穿透,由官方提供通讯服务器,并且他对 P2P 穿透的支持性比较强。
关于 ZeroTier 的注册方法网上已经有很多教程,这里不再赘述。
安装 ZeroTier
ZeroTier 官网提供了多种平台的客户端下载,可自行下载安装。
路由器 (Padavan/OpenWRT)
官网暂时没有提供对应平台的版本,需要使用 opkg 从 Entware 源下载。
最新的软件包可能会有兼容性问题,如果启动时出现如下的警告信息:
WARNING: ioctl() failed setting up Linux tap device (set MAC)
建议使用 1.4.6 版本,安装脚本如下:
$ opkg install "http://bin.entware.net/mipselsf-k3.4/archive/zerotier_1.4.6-5_mipsel-3.4.ipk"
启动 ZeroTier
路由器 (Padavan/OpenWRT)
$ zerotier-one -d
$ zerotier-cli join <YOUER NETWORK ID>
配置 ZeroTier 路由
在 ZeroTier 创建的网络中添加一条路由记录:
即将所有对内网网段的访问全部代理到路由器的虚拟网卡上。
设置路由器支持桥接模式:
配置路由器防火墙规则
配置防火墙让 ZeroTier 创建的虚拟网卡的流量进入内网,并设置转发规则,从而可以访问内网中的其他机器。
首先查看虚拟网卡的名称:
$ ifconfig
ztklhznki4 Link encap:Ethernet HWaddr 66:BB:BD:04:7C:62
inet addr:10.147.19.163 Bcast:10.147.19.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:2800 Metric:1
RX packets:4659 errors:0 dropped:0 overruns:0 frame:0
TX packets:3150 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:601999 (587.8 KiB) TX bytes:2428690 (2.3 MiB)
我的虚拟网卡名称为:ztklhznki4
配置防火墙规则:
$ iptables -A INPUT -i ztklhznki4 -j ACCEPT
$ iptables -A FORWARD -i ztklhznki4 -j ACCEPT
$ iptables -A FORWARD -o ztklhznki4 -j ACCEPT
$ iptables -t nat -A POSTROUTING -o ztklhznki4 -j MASQUERADE