最近有个需求,出门在外的时候想会连家里局域网的一些服务,之前一直使用的是cloudflare的隧道功能,但是还是不够方便(但是cf隧道的安全性还是很强的,有零信任机制)。
调研了一下,最后决定使用WireGuard。中间遇到的问题主要是流量到不了家里。转发规则设置的问题。参考的最好的一篇文章-https://gobomb.github.io/post/wireguard-notes/(其他的都是鬼扯蛋)
配置信息
个人笔记本(Mac)-192.168.2.2(wg)
VPS-192.168.2.1(wg)
家里任意一台局域网主机(Home Linux)-192.168.1.1/24 192.168.2.3(wg)
wg genkey > private
ip link add dev wg0 type wireguard # 添加 wireguard 网卡 wg0
ip addr add 192.168.2.1/24 dev wg0
wg set wg0 private-key ./private # 设置私钥
ip link set wg0 up #启动网卡
wg # 查看公钥
先配置wg
wg genkey > private
ip link add wg0 type wireguard
ip addr add 192.168.2.2/24 dev wg0
wg set wg0 private-key ./private
ip link set wg0 up
连接VPS
wg set wg0 peer OM5NlntS3l0hCBrrlvFGnVoThIniVICuulbszIQ0Lhs= allowed-ips 192.168.2.0/24 endpoint ip:port persistent-keepalive 15
查看home linux公钥
wg
服务端添加home linux
wg set wg0 peer homelinux公钥 allowed-ips 192.168.2.2/32,192.168.1.0/24 persistent-keepalive 15
brew install wireguard-tools
sudo mkdir /etc/wireguard
wg genkey | tee privatekey | wg pubkey > publickey
touch wg0.conf
[Interface]
Address = 192.168.2.3/32
PrivateKey = mac private key
[Peer]
PublicKey = vps public key
Endpoint = vpsip:port
AllowedIPs = 192.168.2.0/24,192.168.1.0/24
PersistentKeepalive = 15
启动wg
sudo wg-quick up wg0
VPS添加Mac wg
wg set wg0 peer macwg公钥 allowed-ips 192.168.2.2/32 persistent-keepalive 15
分别三台机器互相ping,成功以后进行下一步。
需要在各个机器上设置路由转发规则,否则流量到不了家里。
Mac
让目标网段的流量走指定网关
sudo route -n add 192.168.31.0/24 192.168.2.1
VPS
开启流量转发
net.ipv4.ip_forward = 1
sysctl -p
iptables -t filter -A FORWARD -i wg0 -j ACCEPT # 方形
iptables -t filter -A FORWARD -o wg0 -j ACCEPT
ip r add 192.168.1.0/24 via 192.168.2.1 dev wg0
Home Linux
net.ipv4.ip_forward = 1
sysctl -p
iptables -t filter -A FORWARD -i wg0 -o homelinux网卡 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o homelinux网卡 -j MASQUERADE
iptables -t filter -A FORWARD -i homelinux网卡 -o wg0 -j ACCEPT
至此,已成。
如果中间遇到网络问题,用以下命令调试即可。
tcpdump -i wg0 -nn icmp