要在内网环境下解决 iptables 缺失的问题,你需要在一台能上网的电脑上下载好安装包,然后拷贝进 WSL2 进行安装。

由于 Ubuntu 的 iptables 依赖于多个底层库,只下载一个主包是不够的。

以下是最稳妥的“打包带走”方案,请严格按照步骤操作:

📥 第一步:在能上网的电脑上操作

你需要一台能联网的机器(最好是和你要部署的 WSL2 版本一致的 Ubuntu 系统,比如都是 Ubuntu 20.04 或 22.04)。

1. 准备下载工具

打开终端,安装两个工具:apt-rdepends(用于自动查找依赖)和 dpkg-dev(用于下载)。

sudo apt-get update
sudo apt-get install -y apt-rdepends dpkg-dev
2. 自动下载 iptables 及其所有依赖

创建一个专门存放包的文件夹,并下载所有必要的文件:

# 创建目录
mkdir -p ~/iptables-packages
cd ~/iptables-packages

# 自动下载 iptables 和它需要的所有依赖包
# 这条命令会递归查找依赖并下载到当前目录
apt-get download $(apt-rdepends iptables | grep -v "^ " | sort -u)

注意:如果上面的命令报错,你可以尝试手动下载核心包:apt-get download iptables libip4tc2 libip6tc2 libxtables12

3. 打包文件

下载完成后,将这些 .deb 文件压缩成一个包,方便传输:

cd ~
tar -czvf iptables-offline.tar.gz iptables-packages/

此时,你的联网电脑主目录下会生成一个 iptables-offline.tar.gz 文件。


📦 第二步:传输到 WSL2(内网环境)

将生成的 iptables-offline.tar.gz 文件传输到你的 WSL2 中。

  1. 如果是 Windows 宿主机 -> WSL2:

    • 你可以先把文件复制到 Windows 的某个文件夹(比如 D:\wsl\)。
    • 然后在 WSL2 中挂载该目录(你已经在 /mnt/d/wsl 了),或者直接在 Windows 文件资源管理器中把文件拖进去。
  2. 如果是通过 U 盘:

    • 在 WSL2 中挂载 U 盘,或者先拷到 Windows 再移入 WSL2。

🛠️ 第三步:在 WSL2(内网环境)中安装

回到你的 WSL2 终端,假设你已经把 iptables-offline.tar.gz 放到了 /mnt/d/wsl/ 目录下:

1. 解压文件
cd /mnt/d/wsl
mkdir -p ~/iptables-install
tar -xzvf iptables-offline.tar.gz -C ~/iptables-install
cd ~/iptables-install/iptables-packages
2. 批量安装

使用 dpkg 命令一次性安装目录下的所有包(这会自动处理依赖关系):

sudo dpkg -i *.deb

如果提示依赖错误,尝试运行 sudo apt-get install -f(但这通常需要联网)。如果 dpkg -i 报错说缺少某个具体的包,说明第一步下载时漏掉了依赖,需要重新在联网机器上检查。

3. 验证并修复软链接

安装成功后,再次检查文件是否存在:

ls -l /usr/sbin/iptables-legacy

如果文件存在了,执行之前我们讨论过的修复命令:

sudo ln -s /usr/sbin/iptables-legacy /usr/sbin/iptables
sudo ln -s /usr/sbin/ip6tables-legacy /usr/sbin/ip6tables
4. 启动 Docker

现在你可以重新尝试启动 Docker 了:

sudo dockerd --host unix:///var/run/docker.sock --containerd=/run/containerd/containerd.sock &

💡 备选方案(如果无法使用 apt-rdepends)

如果你无法在联网机器上安装 apt-rdepends,你可以直接去 Ubuntu 的官方仓库网页下载。

  1. 访问 Ubuntu 软件包列表(根据你的版本,例如 Jammy 22.04):
    • iptables: http://archive.ubuntu.com/ubuntu/pool/main/i/iptables/
  2. 你需要手动下载以下文件(注意选择 amd64 架构):
    • iptables_..._amd64.deb
    • libip4tc2_..._amd64.deb
    • libip6tc2_..._amd64.deb
    • libxtables12_..._amd64.deb
  3. 把这些文件打包带走,然后在 WSL2 里用 sudo dpkg -i *.deb 安装。

更多推荐