aws ec2 切换到ipv6
ipv6 出来已经很久了,工作中也处理过很多次ipv6的task,但是从来没想过把自己的ec2切换到ipv4,昨天再邮件回收站里面看到了一个邮件,aws 的ipv4 2024.2.1 要收费了,这就不能忽略了😄,刚好今天有空就把他切换成了ipv6,过程有点折腾。 本文不仅适用ec2,其他linux 主机应该也支持。
为ec2 添加一个ipv6 地址
我的ec2 的dns 解析在Cloudflare,所以主要是参考这篇博客。Amazon 的 20 亿 IPv4 税费 — 以及如何避免支付这笔费用
需要注意的是将 VPC 从 IPv4 迁移到 IPv6。这个demo中vpc是有一个公有子网以及一个私有子网,如果您像我一样只有一个公有子网,那这部分就不需要设置了。
不得不说,aws 的文档写的真好,这一点,需要多多学习。
设置完成的结果应该是这样的。同时有ipv4 与ipv6 地址。在安全组中也为ipv6添加相同的规则。
应用支持
我的ec2 上只跑了一个nginx + docker,平时用ssh登录。所以需要为Nginx 与sshd 添加 ipv6支持。
Nginx
对于您的 HTTP 服务器块(监听端口 80 的那个),添加一行 listen [::]:80;
。这使得 Nginx 同时监听 IPv4 和 IPv6 的 HTTP 流量。修改后的服务器块应该像这样:
1 | server { |
对于每个 HTTPS 服务器块(监听端口 443 的那些),在每个块中添加 listen [::]:443 ssl;
。这将使得 Nginx 监听 IPv6 上的 HTTPS 流量。例如,对于第一个 HTTPS 服务器块,你需要做如下修改:
1 | server { |
对每个 HTTPS server
块进行这样的修改。然后测试一下 Nginx -t
如果没问题就重新加载Nginx配置 systemctl reload nginx
sshd
再sshd_config 修改,删除对AddressFamily any
的注释(即删除前面的#
),为 ssh 等应用程序开启 IPv6 监听。
1 | vim /etc/ssh/sshd_config |
然后重启 sshd sudo systemctl reload sshd
,执行netstat -tupln
命令,若出现以下报文,表示查 ssh 已成功监听 IPv6。
这样应用层就修改好了。
dns 设置
最后,在Cloudflare 里面设置 一下dns,把以前的ipv4 的A记录全部改成AAAA 的ipv6 就可以了。
大功告成,测试一下如果没问题的话,就可以把ipv4地址删了。省的扣钱。
更新: 正在运行的实例无法删除ipv4地址,只能通过AMI 重建,折腾呀,但是aws 不再给我发邮件了。✌️
How to remove IPv4 public IP address from ec2 instances before February 2024? (IPv6)