-
Notifications
You must be signed in to change notification settings - Fork 24
原生Docker IPv6 NAT模式 (DSM 7.x)
方法和步骤类似DSM 6,针对DSM 7需略做调整。
修改模块加载列表/usr/syno/etc.defaults/iptables_modules_list
的方式在DSM 7中不起作用,经测试是因为系统内置命令iptablestool无法加载模块,原因未知。
采用最直接的方式,修改/var/packages/Docker/scripts/start-stop-status
启动脚本,暂时没有更优雅的方式。
在docker启动之前用insmod命令加载模块,并更新/var/packages/Docker/etc/dockerd.json
文件,确保ipv6, fixed-cidr-v6, ip6tables, experimental这4个参数存在,启用原生IPv6 NAT模式。
# install modules
iptablestool --insmod "${DockerServName}" ${InsertModules}
$DockerUpdaterBin postinst updatedockerdconf "$(get_install_volume_type)"
insmod /lib/modules/nf_nat_ipv6.ko &> /dev/null
insmod /lib/modules/nf_nat_masquerade_ipv6.ko &> /dev/null
insmod /lib/modules/ip6t_MASQUERADE.ko &> /dev/null
insmod /lib/modules/ip6table_nat.ko &> /dev/null
insmod /lib/modules/ip6table_raw.ko &> /dev/null
insmod /lib/modules/ip6table_mangle.ko &> /dev/null
cat /var/packages/Docker/etc/dockerd.json | jq '. + {experimental: true, "fixed-cidr-v6": "fd07::/64", ip6tables: true, ipv6: true}' > /var/packages/Docker/etc/dockerd.json2; mv -f /var/packages/Docker/etc/dockerd.json{2,}
# start docker
if ! start_docker_daemon; then
exit 1
fi
/var/packages/ContainerManager/etc/dockerd.json
,启动脚本路径变更为/var/packages/ContainerManager/scripts/start-stop-status
。除此之外需要安装更多的mod,否则重启后部分mod会无法加载,原因尚未明确,怀疑是群晖加了限制,对于未签名的ko会在内核启动的某个阶段移除。修改脚本内容如下。
# install modules
iptablestool --insmod "${DockerServName}" ${InsertModules}
$DockerUpdaterBin postinst updatedockerdconf "$(get_install_volume_type)"
# start docker event watcherd
/usr/syno/bin/synosystemctl start "${DockerEventWatcherd}"
insmod /lib/modules/nfnetlink.ko &> /dev/null
insmod /lib/modules/ip_set.ko &> /dev/null
insmod /lib/modules/ip_set_hash_ip.ko &> /dev/null
insmod /lib/modules/xt_set.ko &> /dev/null
insmod /lib/modules/ip_set_hash_net.ko &> /dev/null
insmod /lib/modules/xt_mark.ko &> /dev/null
insmod /lib/modules/xt_connmark.ko &> /dev/null
insmod /lib/modules/xt_comment.ko &> /dev/null
insmod /lib/modules/nf_conntrack_ipv6.ko &> /dev/null
insmod /lib/modules/nf_defrag_ipv6.ko &> /dev/null
insmod /lib/modules/xt_TPROXY.ko &> /dev/null
insmod /lib/modules/xt_socket.ko &> /dev/null
insmod /lib/modules/iptable_mangle.ko &> /dev/null
insmod /lib/modules/textsearch.ko &> /dev/null
insmod /lib/modules/ts_bm.ko &> /dev/null
insmod /lib/modules/xt_string.ko &> /dev/null
insmod /lib/modules/ip6_tables.ko &> /dev/null
insmod /lib/modules/nf_nat.ko &> /dev/null
insmod /lib/modules/nf_nat_ipv6.ko &> /dev/null
insmod /lib/modules/nf_nat_masquerade_ipv6.ko &> /dev/null
insmod /lib/modules/ip6t_MASQUERADE.ko &> /dev/null
insmod /lib/modules/ip6table_nat.ko &> /dev/null
insmod /lib/modules/ip6table_raw.ko &> /dev/null
insmod /lib/modules/ip6table_mangle.ko &> /dev/null
cat /var/packages/ContainerManager/etc/dockerd.json | jq '. + {experimental: true, "fixed-cidr-v6": "fd00::/80", ip6tables: true, ipv6: true}' > /var/packages/ContainerManager/etc/dockerd.json2; mv -f /var/packages/ContainerManager/etc/dockerd.json{2,}
# start docker
if ! start_docker_daemon; then
exit 1
fi
sudo synogroup --add docker
sudo chown root:docker /var/run/docker.sock
重启docker (DSM 7.1需重启2次,否则在Docker应用内不显示网络信息,原因未知),DSM 7.2.1重启系统也是可以的。
# DSM 7.1
sudo synopkg restart Docker
# DSM 7.2.1
sudo systemctl restart pkg-ContainerManager-dockerd.service
查看docker状态
# DSM 7.1
sudo synopkg status Docker
# DSM 7.2
sudo systemctl status pkg-ContainerManager-dockerd.service
查看docker日志
sudo tail /var/log/Docker/docker.log -n 100
sudo tail /var/packages/Docker/var/log/docker.log -n 100 (DSM 7.1路径变化)
# DSM 7.2.1 路径
/var/packages/ContainerManager/var/log/docker.log
测试IPv6连通性
sudo docker run --rm busybox ping -6 -c4 2400:3200::1