使用WireGuard为阿里云专有网络主机提供外网访问

前言

我的阿里云服务器网络处于混合过度模式,逐步从经典网络往专有网络迁移。

之前每台经典网络主机都申请了公网IP和带宽,实际上对于大多数主机的业务而言,并不需要对外提供网络服务,只需要能访问外网即可。
所以这次新加的主机部分都没有去加弹性公网IP。

于是带来了问题:内网主机如何访问外网?

阿里云的dnat方案太贵了。不考虑。

尝试过本地配置网关,但是实验证明,阿里云的VPC交换机不是一个纯粹的二层交换,也许是设计有问题,也许是刻意阻止用户自己拿一台能访问公网的主机当内网网关。

所以这次使用WireGuard实现网络架构调整。

阿里云的经典网络主机里加了几条默认的路由:

前两个都好说,第三个是运营商级的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

主机上没什么东西,所以我把主机更新到最新内核版本,才开始操作的。
官方的命令参考如下

如果系统内核不是已安装的最新版本内核,可能编译会出问题。
安装不成功可以手工执行dkms试试。

Debian 9

这台主机服务太多,不能重启系统。
参考官方命令:

阿里云内网的source list 是

安装完系统没生效。因为我系统内核 4.9.0-4-amd64,而已安装的headers最新版是 4.0.9-6-amd64。

手动执行dkms安装

手工安装一下header再试即可。

配置

网关主机 gw

/etc/wireguard/wg0.conf

sysctl.conf

iptables 开 MASQUERADE

内网主机 it

/etc/wireguard/wg0.conf

/etc/wireguard/wg0.post-up

/etc/wireguard/wg0.post-down

其他

另外,之前配置的时候没留意,ping/traceroute的时候发现

吓得我还以为VPS都能开SecureBoot了。

最后发现是客户端的allowed_ips 写错了。

使用WireGuard为阿里云专有网络主机提供外网访问 by @sskaje: https://sskaje.me/2018/02/aliyun-vpc-hosts-access-internet-using-wireguard/