如何居家办公(与公司网组成虚拟隧道)

12 阅读2分钟

想要实现在家里也可以访问公司内网,我们需要使用到wireguard,我们的网络如下图

需要先有一个公网组成虚拟隧道wg0, 再和公司的主机组成虚拟隧道wgql

wg0: 公网服务器+公司网主机+个人PC(所有你需要互通的设备)

wgql: 公司网主机+个人PC

实线是wg0实现了x99与个人pc的通信
虚线是wgql网卡,实现了个人流量通过wgql网卡与X99的enp4s0的转发和回传,再通过MASQUERADE伪装。

安装Wireguard

mac: brew install wireguard

windows: 官网下载

linux: 同mac

cd /etc/wireguard/
2.生成wg0的私钥和公钥
wg genkey | tee wg0_privatekey | wg pubkey > wg0_publickey

3.生成wgql的私钥和公钥
wg genkey | tee wgql_privatekey | wg pubkey > wgql_publickey

执行 wg-quick up wg0

wg-quick up wgql

阿里云服务器:


[Interface]
Address = 10.0.0.1/24
SaveConfig = false
ListenPort = 51821
PrivateKey = 

# x99
[Peer]
PublicKey = 
AllowedIPs = 10.0.0.2/32

# mac-m1pro
[Peer]
PublicKey = +=
AllowedIPs = 10.0.0.12/32

#  windows
[Peer]
PublicKey = =
AllowedIPs = 100.0.0.11/32

# arch
[Peer]
PublicKey = 
AllowedIPs = 100.0.0.20/32

X99服务器

[Interface]
Address = 10.0.0.2/24
PrivateKey = 


[Peer]
PublicKey = 
Endpoint = 8.xx.xx.xx:51820
AllowedIPs = 10.0.0.0/24
#别人可不加但是x99作为中继服务一定要加,每25秒发一次心跳告诉阿里云防止掉线
PersistentKeepalive = 25

root@cy-x99:/etc/wireguard# cat wgql.conf
[Interface]
Address = 10.0.1.1/24
SaveConfig = false
ListenPort = 51821
PrivateKey = 

# 启动时添加 iptables 规则 enp4s0是公司的网线 tun0是公司的vpn 你们要注意自己的网卡
PostUp = iptables -A FORWARD -i wgql -j ACCEPT && iptables -A FORWARD -o wgql -j ACCEPT && iptables -t nat -A POSTROUTING -o enp4s0 -j MASQUERADE && iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE


# 停止时删除规则(顺序与 PostUp 相反更安全)
PostDown = iptables -D FORWARD -i wgql -j ACCEPT && iptables -D FORWARD -o wgql -j ACCEPT && iptables -t nat -D POSTROUTING -o enp4s0 -j MASQUERADE && iptables -t nat -D POSTROUTING -o tun0 -j MASQUERADE

# mac-m1pro
[Peer]
PublicKey = 
AllowedIPs = 10.0.1.12/32

#  windows
[Peer]
PublicKey = 
AllowedIPs = 10.0.1.11/32

# arch
[Peer]
PublicKey = 
AllowedIPs = 10.0.1.20/32


root@cy-x99:/etc/wireguard#
  1. FORWARD 规则:负责允许客户端流量在服务端转发(入站 + 出站双向);
  2. MASQUERADE 规则:负责伪装客户端 IP,让外网能正常回包;

个人PC: 安装wireguard

[root@cy-arch wireguard]# cat wg0.conf
# 服务端/客户端基础配置
[Interface]
PrivateKey = 
Address = 10.0.0.20/24
# 这里需要x99服务器开启dns解析的能力来解析公司的域名
DNS = 10.0.0.2
ListenPort = 51820

# 对等节点配置(比如客户端配置服务端信息)
[Peer]
PublicKey = 
AllowedIPs = 10.0.0.0/24
Endpoint = 8.xxx.xxx.xxx:51820
[root@cy-arch wireguard]#

[root@cy-arch wireguard]# cat wgql.conf

[Interface]
Address = 10.0.1.20/24
SaveConfig = false
PrivateKey = 

[Peer]
PublicKey = 

Endpoint = 10.0.0.2:51821
# 这里是你需要访问的公司的ip,注意不要写0.0.0.0/0 这样你的wg0(10.0.0.0/24)也会转发导致无法回包
AllowedIPs = 8.xxx.0.0/16, 192.0.0.0/8, 10.0.1.0/24, 120.xxx.xxx.0/32, 47.xxx.xxx.xxx/32, 223.0.0.0/8, 116.0.0.0/8


[root@cy-arch wireguard]#