为了外出的时能够方便访问到家庭局域网server的资源,通常的做法是吧资源端口暴露到公网。如果依赖资源很多,配置麻烦也不安全
Wireguard 是一个轻量。内核级别的VPN实现。严格来说它只是一个peer-to-peer的工具。只是可以配合Linux 的iptables实现路由和转发功能,从而实现一个VPN网络。
1. Wireguard 有什么优点:
- 轻量,wireguard其实就是个加密通道实现。大部分功能以来操作系统
- 高性能,linux内核模块实现,运行在内核空间
- 省电,UDP协议实现,没有长链接,移动设备来说更省电
2. 我想用来实现什么
我家里的home server & raspberry pi中跑了很多常用服务。如smb、home-assistant、dns server。可以借助于wireguard实现外出时无缝访问局域网资源。不用将服务暴露到公网,相当更安全。
因为局域网的Openwrt路由器中做了很多便利工具,如去广告等。即使我在外也可以通过wireguard使用局域网openwrt的DNS服务。
局域网的home server也可以通过wireguard之间访问的我的移动设备或者Macbook。这样我可以通过home server来固定暴露MacBook上的端口。并且提供https加密。比较方便工作中的开发调试。
3. Wireguard Server的安装
因为我的路由器是openwrt,所以我之间将wireguard安装在Openwrt上,省去了端口转发。
如果你想安装在其他server上,参考这个 Docker 安装 Wireguard
- 安装必要包
opkg update
opkg install wireguard-tools
opkg install kmod-wireguard
opkg install luci-app-wireguard
- 配置 server interface
生成server密钥对:
wg genkey | tee privatekey | wg pubkey > publickey
生成两个文件,内容是server的公钥和私钥
修改server配置,vim /etc/config/network:
config interface 'vpn'
option proto 'wireguard'
option private_key '用上一步生产的privatekey替换'
option listen_port '51820' # server的公开端口
list addresses '192.168.172.0/24' # 子网网段
- 配置一个peer
生成peer密钥对:
wg genkey | tee peer_privatekey | wg pubkey > peer_publickey
同样修改/etc/config/network文件:
config wireguard_vpn 'wg_peer_mbp'
option preshared_key '可选项,server和client保持一致就OK'
option description 'My MBP peer'
option public_key 'peer_publickey的内容'
option persistent_keepalive '25'
option route_allowed_ips '1'
list allowed_ips '192.168.172.10/32' # 给peer分配的ip
- 配置client
wireguard是一个对等配置,下面我们配置client的peer对等点:
peer.conf
[Interface]
PrivateKey = 这里是上一步生产的peer_privatekey内容
Address = 192.168.172.10/32
DNS = 172.16.0.1 # 我的openwrt ip,可选项
[Peer]
PublicKey = 这里是server的public key
PresharedKey = 与server里面peer配置的一致即可
AllowedIPs = 192.168.172.1/24, 172.16.0.1/24 # 需要转发的ip段
Endpoint = server地址或者domain:51820
PersistentKeepalive = 25
peer.conf 里面的Interface配置对应的是openwrt config里面的interface vpn
peer.conf 里面的Peer配置对应的是openwrt config里面的wg_peer_mbp
server peer里面登记client peer的公钥。client peer里面登记的是sever的公钥。wireguard是双向对等验证
从这里下载wireguard客户端:
https://www.wireguard.com/install/
客户端导入peer.conf即可。
wireguard的client支持Demand功能。可以灵活配置client在什么样的网络状态下自动连接server。
例如:我配置了一直连接server除非已经连接了家里的Wi-Fi
- 配置openwrt防火墙
config rule 'wg'
option name 'Allow-WireGuard'
option src 'wan'
option dest_port '51820'
option proto 'udp'
option target 'ACCEPT'
4. 结尾
因为使用的openwrt。本身已经支持打开了路由转发。如果使用的是linux server。需要手动打开ip_forward
echo "1" > /proc/sys/net/ipv4/ip_forward