通用模块加载的方法 - sjtuross/syno-iptables GitHub Wiki

为了群晖重启之后自动加载所需的内核模块,利用docker package的/var/packages/Docker/scripts/start-stop-status文件,在docker服务启动之前插入insmod命令强行加载。唯一的缺点是将来docker包升级之后可能需要重复做一次,暂时没有更优雅的方式。

📝 也可以使用群晖系统自带的计划任务加载模块,但可能无法保证在docker package之前运行

📝 不同系统的内核模块以及加载顺序稍有不同

以下以DSM 7.1-42661 Update 1系统为例,适用于4.X内核的系统
# install modules
iptablestool --insmod "${DockerServName}" ${InsertModules}

$DockerUpdaterBin postinst updatedockerdconf "$(get_install_volume_type)"

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/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/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

# start docker
if ! start_docker_daemon; then
    exit 1
fi
以下以DSM 6.2.3-25426 Update 3系统为例,适用于3.X内核的系统
# install modules
iptablestool --insmod "${DockerServName}" ${InsertModules}

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_tproxy_core.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/nf_nat_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

# start docker
if ! start_docker_daemon; then
    exit 1
fi

⚠️ 群晖默认没创建docker组,需要把它创建出来并修复权限

sudo synogroup --add docker
sudo chown root:docker /var/run/docker.sock

重启docker

sudo synopkg restart Docker

查看docker状态

sudo synopkg status Docker

查看docker日志

sudo tail /var/log/Docker/docker.log -n 100
sudo tail /var/packages/Docker/var/log/docker.log -n 100 (DSM 7.1路径变化)
⚠️ **GitHub.com Fallback** ⚠️