前言
我的阿里云服务器网络处于混合过度模式,逐步从经典网络往专有网络迁移。
之前每台经典网络主机都申请了公网IP和带宽,实际上对于大多数主机的业务而言,并不需要对外提供网络服务,只需要能访问外网即可。
所以这次新加的主机部分都没有去加弹性公网IP。
于是带来了问题:内网主机如何访问外网?
阿里云的dnat方案太贵了。不考虑。
尝试过本地配置网关,但是实验证明,阿里云的VPC交换机不是一个纯粹的二层交换,也许是设计有问题,也许是刻意阻止用户自己拿一台能访问公网的主机当内网网关。
所以这次使用WireGuard实现网络架构调整。
阿里云的经典网络主机里加了几条默认的路由:
1 2 3 |
10.0.0.0/8 172.16.0.0/12 100.64.0.0/10 |
前两个都好说,第三个是运营商级的NAT网络地址,之前在 OpenVPN Site-to-Site VPN between Asus Merlin And Ubnt EdgeRouter 里提过贵州电信的光纤网络对外就是这个地址段。
WireGuard的配置过程参考之前的文章,此处不多解释,只贴配置。
环境
网关主机,gw,CentOS 7。弹性网络。有弹性IP(可访问外网)。网络设备:eth0(172.16.1.100),lo。内网网关 172.16.1.253。
内网主机,it,Debian 9。弹性网络。无弹性IP(无外网访问)。网络设备:eth0(172.16.1.101), lo。内网网关 172.16.1.253。
安装
两个我都用的包管理安装的。但是由于内网主机访问不了外网,所以我在公网主机上放了个squid做代理给内网主机用。
CentOS 7
主机上没什么东西,所以我把主机更新到最新内核版本,才开始操作的。
官方的命令参考如下
1 2 3 |
$ sudo curl -Lo /etc/yum.repos.d/wireguard.repo https://copr.fedorainfracloud.org/coprs/jdoss/wireguard/repo/epel-7/jdoss-wireguard-epel-7.repo $ sudo yum install epel-release $ sudo yum install wireguard-dkms wireguard-tools |
如果系统内核不是已安装的最新版本内核,可能编译会出问题。
安装不成功可以手工执行dkms试试。
1 |
dkms install -m wireguard -v 0.0.20180218 |
Debian 9
这台主机服务太多,不能重启系统。
参考官方命令:
1 2 3 4 |
# echo "deb http://deb.debian.org/debian/ unstable main" > /etc/apt/sources.list.d/unstable-wireguard.list # printf 'Package: *\nPin: release a=unstable\nPin-Priority: 150\n' > /etc/apt/preferences.d/limit-unstable # apt update # apt install wireguard |
阿里云内网的source list 是
1 2 |
# cat /etc/apt/sources.list.d/unstable.list deb http://mirrors.cloud.aliyuncs.com/debian/ unstable main |
安装完系统没生效。因为我系统内核 4.9.0-4-amd64,而已安装的headers最新版是 4.0.9-6-amd64。
手动执行dkms安装
1 2 3 4 |
root@it:~# dkms install -m wireguard -v 0.0.20180218-1 Error! Your kernel headers for kernel 4.9.0-4-amd64 cannot be found. Please install the linux-headers-4.9.0-4-amd64 package, or use the --kernelsourcedir option to tell DKMS where it's located |
手工安装一下header再试即可。
1 |
root@it:~# apt install linux-headers-4.9.0-4-amd64 |
配置
网关主机 gw
/etc/wireguard/wg0.conf
1 2 3 4 5 6 7 8 9 |
[Interface] Address = 192.168.100.1/24 MTU = 1500 ListenPort = 12345 PrivateKey = ***** [Peer] PublicKey = ***** AllowedIPs = 192.168.100.11/32 |
sysctl.conf
1 |
net.ipv4.ip_forward=1 |
iptables 开 MASQUERADE
1 |
/usr/sbin/iptables -A POSTROUTING -t nat -o eth0 -j MASQUERADE |
内网主机 it
/etc/wireguard/wg0.conf
1 2 3 4 5 6 7 8 9 10 11 12 |
[Interface] Address = 192.168.100.11/24 MTU = 1500 ListenPort = 12345 PrivateKey = ***** PostUp = /etc/wireguard/wg0.post-up PostDown = /etc/wireguard/wg0.post-down [Peer] PublicKey = ***** Endpoint = gw:12345 AllowedIPs = 0.0.0.0/0, 192.168.100.1/32 |
/etc/wireguard/wg0.post-up
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#!/bin/bash VPC_GW=172.16.1.253 VPC_DEV=eth0 WG_GW=192.168.100.1 WG_DEV=wg0 ip route del 10.0.0.0/8 ip route add 10.0.0.0/8 via $VPC_GW dev $VPC_DEV ip route del 100.64.0.0/10 ip route add 100.64.0.0/10 via $VPC_GW dev $VPC_DEV ip route del 172.16.0.0/12 ip route add 172.16.0.0/12 via $VPC_GW dev $VPC_DEV ip route del 0.0.0.0/0 ip route add 0.0.0.0/0 via $WG_GW dev $WG_DEV |
/etc/wireguard/wg0.post-down
1 2 3 4 5 6 7 8 9 10 |
#!/bin/bash VPC_GW=172.1.16.253 VPC_DEV=eth0 ip route del 10.0.0.0/8 ip route del 100.64.0.0/10 ip route del 172.16.0.0/12 ip route del 0.0.0.0/0 ip route add 0.0.0.0/0 via $VPC_GW dev $VPC_DEV |
其他
另外,之前配置的时候没留意,ping/traceroute的时候发现
1 |
sendmsg: Required key not available |
吓得我还以为VPS都能开SecureBoot了。
最后发现是客户端的allowed_ips 写错了。
Incoming search terms:
- wireguard节点
- wireguard节点分享
- setup aliyun wireguard
- ping: sendmsg: Required key not available
- wireguard 分析
- wireguard 节点 分享
- wireguard 节点
- WireGuard 协议分析
- fogrbc
- ringcqr
- movement3h5
- introduceduwe
- ink9b
- fire67x
- docker wireguard
- dkms管理wireguard
- bring3hv
- breakd4m
- 阿里云搭建wireguard
- blindx1r