前言
- 有时候需要两个局域网之间能互相访问,比如远程办公需要访问公司的资料,或者外出需要访问家里的 NAS;基于管理和安全的考虑,结合用过的软件,这里做下记录
方案
- 异地组网的方案有很多,这里以 WireGuard,ZeroTier,TailScale 这三个软件为主,其他诸如 OmniEdge,向日葵等没用过的就不做说明了
ZeroTier
优点:不基于 WireGuard,和交换机一样工作在第二层(数据链路层),配置简单,支持多个平台
缺点:免费的 moon 由于都在国外,体验不是很好,不过可以自己在 vps 上搭建私有 moon
主要步骤:
在 www.zerotier.com 创建一个账号并登录
Create A Network, Network ID 为设备加入局域网中的唯一标识符
配置网络信息,如果局域网设置为 Private,每当有新的设备加入需要在 web 页面确认
安装到设备上,登录账号即可
到 web 页面中确认是否添加到局域网中,也可为设备分配固定的虚拟 ip
WireGuard
优点:工作在第三层(网络层),以 UDP 协议进行数据传输,灵活安全高效,支持多个平台
缺点:需要一台服务器,没有管理的页面,配置较为麻烦
主要步骤:
安装到设备上
Ubuntu
1
2
3
4
5
6
7# begin with 19.10(Eoan), the two following statement are not needed
# 19.10(Eoan) 之后,以下这两句不用再执行。
apt install software-properties-common;
add-apt-repository ppa:wireguard/wireguard;
apt-get update;
apt-get install wireguard;CentOS7
1
2
3curl -Lo /etc/yum.repos.d/wireguard.repo \
https://copr.fedorainfracloud.org/coprs/jdoss/wireguard/repo/epel-7/jdoss-wireguard-epel-7.repo;
yum install wireguard-dkms wireguard-tools;
服务端和每一台客户端都需生成密钥
1
2mkdir -p /etc/wireguard/
wg genkey | sudo tee /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key服务端配置文件中填入
申请的虚拟 ip
,监听端口
,服务器私钥
,每个客户端的公钥
,允许的 ip 网段
1
2
3
4
5
6
7
8[Interface]
Address = 10.0.0.1/24
ListenPort = <port>
PrivateKey = <server_private.key>
[Peer]
PublicKey = <client_public.key>
AllowedIPs = 10.0.0.2/32客户端配置文件中填入
客户端私钥
,申请的虚拟 ip
,服务器公钥
,允许的 ip 网段
,服务器 ip 和端口号
1
2
3
4
5
6
7
8
9[Interface]
PrivateKey = <client_Private Key>
Address = 10.0.0.2/32
DNS = 8.8.8.8
[Peer]
PublicKey = <server_public.key>
Endpoint = <Server Public IP>:<port>
AllowedIPs = 0.0.0.0/0服务端还需要配置一些读写权限,ip 内核转发以及防火墙
启动服务的一些命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14# 启动服务
wg-quick up wg0
# 停止服务
wg-quick down wg0
# 或者用 systemctl 命令启动服务
systemctl start [email protected]
# 设置为开机启动
systemctl enable [email protected]
# 取消开机启动
systemctl disable [email protected]
TailScale
优点:基于 WireGuard,自动 NAT 穿透,打洞成功率较高,打洞失败再走中继服务器(derp),配置简单,支持多个平台
优点:在 Linux 上可以设置出口节点(Exit Node),其他机器只要选择这个 Linux 节点,那么所有的流量都会走这个出口节点
缺点:定制不如 WireGuard 灵活,比较适合个人快速组网
主要步骤:
在 login.tailscale.com 创建一个账号并登录
安装到 OpenWrt 上
ssh 登录到路由器上
下载安装包
1
wget https://github.com/adyanth/openwrt-tailscale-enabler/releases/download/v1.36.1-fb2f6cf-autoupdate/openwrt-tailscale-enabler-v1.36.1-fb2f6cf-autoupdate.tgz
解压软件
1
tar x -zvC / -f openwrt-tailscale-enabler-v1.36.1-fb2f6cf-autoupdate.tgz
安装依赖包
1
2opkg update
opkg install libustream-openssl ca-bundle kmod-tun设置开机启动
1
2/etc/init.d/tailscale enable
ls /etc/rc.d/S*tailscale*启动 TailScale
1
/etc/init.d/tailscale start
第一次需要配置子网路由,子网地址是 OpenWrt LAN 网段,以及配置出口节点
1
tailscale up --advertise-routes=192.168.5.0/24 --accept-dns=false --advertise-exit-node
获取登录链接,复制到浏览器中打开,登录账号
1
tailscale up
在 TailScale 管理页面,点击设备列表右侧的更多图标,禁用密钥过期,打开子网路由,并允许此设备为出口节点
在 OpenWrt 上新建一个接口,协议选静态地址,自定义接口填 tailscale0,地址为 TailScale 管理页面上分配的地址,子网掩码 255.0.0.0,防火墙区域选 LAN 区域
添加防火墙规则
1
2
3iptables -I FORWARD -i tailscale0 -j ACCEPT
iptables -I FORWARD -o tailscale0 -j ACCEPT
iptables -t nat -I POSTROUTING -o tailscale0 -j MASQUERADE重启防火墙
1
2
3/etc/init.d/firewall reload
# or
/etc/init.d/firewall restart