网络上的教程很多,但是难点(与我而言)在于转发 IPv6 的数据,流水账如下:
1、确定母鸡支持 IPv6
1
| ping6 google.com -n -c 4
|
2、Docker 配置
修改文件:/etc/docker/daemon.json,增加 Docker 配置项:
1
2
3
4
| {
"ipv6": true,
"fixed-cidr-v6": "2001:db8:1::/64"
}
|
3、重启 Docker
1
| sudo systemctl restart docker
|
4、配置 IPv6 NAT
1
| sudo ip6tables -t nat -A POSTROUTING -s 2001:db8:1::/64 ! -o docker0 -j MASQUERADE
|
5、测试是否已经支持 IPv6 网络
1
| sudo docker run --rm -t busybox ping6 -c 4 google.com
|
6、docker-compose 相关
如果你使用 docker-compose 作为容器启动服务,那还需要修改对应的 YAML 文件,增加 network IP 相关的信息,完整 docker-compose.yml 文件如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| version: '3.7'
services:
caddy:
image: caddy
container_name: caddy
restart: always
ports:
- "443:443"
volumes:
- ./config:/etc/caddy
networks:
default_network:
ipv4_address: 172.16.238.10
ipv6_address: 2001:1234:5678::10
networks:
default_network:
enable_ipv6: true
driver: bridge
driver_opts:
com.docker.network.enable_ipv6: "true"
ipam:
driver: default
config:
- subnet: 172.16.238.0/24
gateway: 172.16.238.1
- subnet: 2001:1234:5678::/64
gateway: 2001:1234:5678::1
|
7、配置新的 IPv6 NAT
1
| sudo ip6tables -t nat -A POSTROUTING -s 2001:1234:5678::/64 ! -o docker0 -j MASQUERADE
|
8、持久化 ip6tables
Debian 系可以使用 iptables-persistent 包来进行持久化,比如 Debian 11:
1
| sudo apt install iptables-persistent
|
并确保服务是开机自启动的:
1
| sudo systemctl is-enabled netfilter-persistent.service
|
如果不是,可以执行:
1
| sudo systemctl enable netfilter-persistent.service
|
查看对应服务状态:
1
| sudo systemctl status netfilter-persistent.service
|
为了保证重启后,还能自动加载当前的规则:
1
2
3
| sudo iptables-save > /etc/iptables/rules.v4
OR
sudo ip6tables-save > /etc/iptables/rules.v6
|
RHEL/CentOS 系可以使用 iptables-services,一般命令如下:
1
2
3
4
5
6
7
8
9
| # Disable firewalld if installed #
sudo systemctl stop firewalld.service
sudo systemctl disable firewalld.service
sudo systemctl mask firewalld.service
# install package on Linux to save iptables rules using the yum command/dnf command ##
sudo yum install iptables-services
sudo systemctl enable iptables
sudo systemctl enable ip6tables
sudo systemctl status iptables
|