OpenWrt 安装与配置完整流程总结


OpenWrt 安装与配置完整流程总结

一、安装 OpenWrt 到硬盘

准备工作:

  1. 准备一个带有 PE 的启动 U 盘
  2. 准备以下文件并放入 U 盘中:
    • physdiskwrite V0.5.3(写盘工具)
    • openwrt-x86-64-generic-squashfs-combined.img(OpenWrt 镜像文件)

安装步骤:

  1. 使用 PE 启动系统
    • 将 PE 启动 U 盘插入电脑
    • 开机进入 BIOS,设置从 U 盘启动
    • 进入 PE 系统
  2. 使用 physdiskwrite 写入镜像
    • 在 PE 系统中,以管理员权限运行 CMD
    • 进入 U 盘目录
    • 执行写盘命令:physdiskwrite.exe -u openwrt-x86-64-generic-squashfs-combined.img
    • 选择要写入的硬盘序号(通常为 0)
    • 确认信息无误后,输入 y 确认写入
    • 等待写入完成

重要提示:

  • 此操作会清空目标硬盘的所有数据,请提前备份重要数据
  • 写入完成后,必须立即进行分区扩容,如果重启进入过 OpenWrt 系统后再进行分区扩容将不会有任何效果

二、扩展 rootfs 分区

使用 GParted 扩展分区(推荐):

  1. 准备 GParted 启动 U 盘
    • 制作一个 GParted Live USB 启动盘
    • 将 GParted U 盘插入电脑
  2. 启动 GParted
    • 从 GParted U 盘启动系统
    • 进入 GParted 图形界面
  3. 扩展 rootfs 分区
    • 在 GParted 中选择刚刚写入 OpenWrt 的硬盘
    • 找到 rootfs 分区(通常显示为未格式化或 ext4 格式的分区)
    • 找到硬盘上灰色未使用的空间(在 rootfs 分区之后)
    • 选中 rootfs 分区,右键点击,选择"调整大小/移动"(Resize/Move)
    • 将分区大小扩展到使用所有可用空间
    • 点击"应用"(Apply)执行操作
    • 等待操作完成
  4. 验证扩容
    • 重启计算机并拔掉所有 U 盘
    • 启动 OpenWrt 系统
    • 在 OpenWrt 命令行中输入:df -h
    • 确认 overlayfs:overlay 的大小已等于硬盘大小

三、配置网络(静态 IP、网关、DNS)

重要:在安装 OpenClash 之前,必须先配置静态 IP,确保网络连接稳定。

配置静态 IP(两种方式):

方法一:使用 Web 界面(推荐,图形化操作)

  1. 登录 OpenWrt Web 界面(默认地址通常是 192.168.1.1)
  2. 进入 网络 → 接口 → LAN
  3. 点击"编辑"按钮
  4. 在"基本设置"中:
    • IPv4 地址:192.168.1.2
    • IPv4 子网掩码:255.255.255.0
    • IPv4 网关:192.168.1.1
  5. 在"高级设置"中:
    • 使用自定义的 DNS 服务器:223.5.5.5 114.114.114.114
  6. 点击"保存并应用"

方法二:使用 SSH 命令

在 OpenWrt SSH 中执行以下命令:

uci set network.lan.ipaddr='192.168.1.2'
uci set network.lan.netmask='255.255.255.0'
uci set network.lan.gateway='192.168.1.1'
uci set network.lan.dns='223.5.5.5 114.114.114.114'
uci commit network
/etc/init.d/network restart

配置项说明:

  • ipaddr:OpenWrt 的静态 IP 地址(旁路由:192.168.1.2)
  • netmask:子网掩码
  • gateway:网关地址(主路由:192.168.1.1)
  • dns:DNS 服务器(阿里云:223.5.5.5,114:114.114.114.114)

四、更新软件源并安装支撑软件

  1. 更新软件源
    opkg update
  2. 删除精简版 dnsmasq,安装完整版(重要:必须单独安装
    opkg remove dnsmasq
    opkg install dnsmasq-full --force-overwrite

说明:dnsmasq-full 必须单独强制安装,不能与其他包一起安装,否则可能版本冲突。

五、安装 OpenClash

  1. 确定防火墙类型

    在安装 OpenClash 之前,需要先确定系统使用的是 iptables 还是 nftables:

    检查方法:

    which iptables
    which nft
    nft list tables | grep fw4

    判断标准:

    • 如果 nft list tables 能列出 table inet fw4 → 使用 nftables (firewall4)
    • 如果只有 iptables 命令 → 使用 iptables

    OpenWrt 24.10.5 使用 nftables (firewall4)

  2. 卸载轻量版 dnsmasq,强制安装完整版(重要:必须先处理
    opkg remove dnsmasq
    opkg install dnsmasq-full --force-overwrite
  3. 安装 OpenClash 依赖包

    依赖包来源:OpenWrt 官方软件源(通过 opkg 安装)

    opkg update
    opkg install bash dnsmasq-full curl ca-bundle ip-full ruby ruby-yaml kmod-tun kmod-inet-diag unzip kmod-nft-tproxy luci-compat luci luci-base

    说明:这些依赖包来自 OpenWrt 官方软件源,通过 opkg 包管理器安装

  4. 下载并安装 OpenClash

    访问 https://github.com/vernesong/OpenClash/releases/ 查看最新版本

    根据系统架构(x86_64、arm64 等)和防火墙类型(iptables/nftables)选择对应版本

    示例(nftables 版本):

    wget -O /tmp/openclash.ipk https://github.com/vernesong/OpenClash/releases/download/v0.47.046/luci-app-openclash_0.47.046_all.ipk
    opkg install /tmp/openclash.ipk

    说明:安装完成后,OpenClash 服务不会自动启动,需要手动启动和配置

  5. 启动 OpenClash 服务

    安装完成后,OpenClash 不会自动启动,需要:

    • 登录 OpenWrt Web 界面
    • 进入 OpenClash → 全局设置
    • 点击"启动"按钮启动服务

    或使用命令:

    /etc/init.d/openclash start
  6. 导入订阅
    • 登录 OpenWrt Web 界面
    • 进入 OpenClash → 配置订阅
    • 添加订阅链接
    • 更新配置文件
  7. 配置加速模式

    在 OpenClash Web 界面配置:

    • 进入 OpenClash → 全局设置模式设置
    • 运行模式:选择 Redir-Host(兼容)模式(不要用 Fake-IP)
    • 代理模式:选择全局(Global)模式或规则(Rule)模式
    • 手动指定加速节点:在"节点选择"中选择一个可用的节点

    重要设置(在 OpenClash Web 界面):

    • DNS 设置:关闭 DNS 代理和 DNS 劫持(避免 Fake-IP 问题)
    • 模式设置:确保 DNS 增强模式为 redir-host,不是 fake-ip
    • 保存配置并重启 OpenClash

    如何修改 Redir-Host:

    • 在 OpenClash Web 界面:模式设置运行模式 → 选择 Redir-Host(兼容)
    • 在 OpenClash Web 界面:DNS 设置DNS 增强模式 → 选择 redir-host
  8. 验证 Fake-IP 已关闭

    在 OpenWrt 上执行:

    nslookup www.baidu.com 223.5.5.5
    nslookup www.baidu.com

    应该返回真实 IP(如 110.242.69.21),不是 198.18.x.x

六、配置 iKuai 主路由(下一跳分流)

  1. 在 iKuai 上配置端口分流(下一跳分流)
    • 登录 iKuai 管理界面
    • 进入 网络设置 → 端口分流(或 分流设置 → 端口分流
    • 添加新规则:
      • 分流方式:下一跳网关
      • 下一跳网关:192.168.1.2(OpenWrt 旁路由 IP,不能是 192.168.1.1
      • 源地址:需要通过加速的网段(如 192.168.6.0/24、192.168.192.0/18 等)
      • 协议:任意
      • 状态:启用

    重要:下一跳网关必须指向旁路由(192.168.1.2),不能指向主路由自己(192.168.1.1),否则会导致路由循环。

  2. 关闭 DHCP(如果 OpenWrt 作为旁路由)

    方法一:使用 Web 界面(推荐,图形化操作)

    1. 登录 OpenWrt Web 界面
    2. 进入 网络 → DHCP/DNS
    3. 在"基本设置"中,找到"忽略此接口"选项
    4. 勾选"忽略此接口"(或设置为"忽略")
    5. 点击"保存并应用"

    方法二:使用 SSH 命令

    在 OpenWrt 上执行:

    uci set dhcp.lan.ignore='1'
    uci commit dhcp
    /etc/init.d/dnsmasq restart

    让主路由(iKuai)负责 DHCP 分配

  3. 验证下一跳是否生效

    在客户端执行:

    tracert -d www.baidu.com

    应该看到:

    • 第1跳:192.168.6.1(iKuai 的 LAN2 网关)
    • 第2跳:192.168.1.2(OpenWrt 旁路由)← 说明下一跳已生效
    • 第3跳及之后:正常出网

七、配置 OpenWrt SNAT(开启回流)

为什么需要 SNAT:

当 iKuai 配置下一跳将流量转发到 OpenWrt 时,OpenWrt 收到的包源地址仍然是客户端网段(如 192.168.6.x)。当 OpenWrt 将这些包转发回 iKuai 时,iKuai 会看到"源地址是 192.168.6.x 但从连接 iKuai 的接口来"(虽然物理上不是 lan1,但逻辑上是从同一个接口转发),可能触发反向路径检查(RPF)而丢包,导致"开启下一跳后无法上网"。

SNAT 的作用:将来自指定网段的流量源地址伪装成 OpenWrt 的 IP(192.168.1.2),让 iKuai 只看到来自 192.168.1.2 的流量,避免丢包。

配置 SNAT(nftables/firewall4 方式,推荐):

方法一:使用 firewall4.user(最稳定,推荐)

这是 firewall4 的标准持久化方式,重启后自动生效:

注意:不能使用 cat 命令一次性写入,需要分别执行每条 nft 命令。

在 OpenWrt SSH 中分别执行以下命令(每条命令单独执行):

nft add rule inet fw4 srcnat oifname "br-lan" ip saddr 192.168.6.0/24 masquerade
nft add rule inet fw4 srcnat oifname "br-lan" ip saddr 192.168.192.0/18 masquerade
nft add rule inet fw4 srcnat oifname "br-lan" ip saddr 192.168.88.0/24 masquerade
nft add rule inet fw4 srcnat oifname "br-lan" ip saddr 192.168.8.0/24 masquerade

然后创建持久化文件(将上述命令写入文件,以便重启后自动执行):

cat > /etc/firewall4.user <<'EOF'
# SNAT for policy-routed subnets to iKuai via br-lan
nft add rule inet fw4 srcnat oifname "br-lan" ip saddr 192.168.6.0/24 masquerade
nft add rule inet fw4 srcnat oifname "br-lan" ip saddr 192.168.192.0/18 masquerade
nft add rule inet fw4 srcnat oifname "br-lan" ip saddr 192.168.88.0/24 masquerade
nft add rule inet fw4 srcnat oifname "br-lan" ip saddr 192.168.8.0/24 masquerade
EOF

chmod +x /etc/firewall4.user
/etc/init.d/firewall restart

如何确定需要 SNAT 的网段:

  1. 在 iKuai 管理界面查看"端口分流"或"下一跳分流"规则
  2. 记录所有"源地址"网段
  3. 为每个网段添加一条 SNAT 规则

验证 SNAT 规则是否生效:

nft list chain inet fw4 srcnat

应该看到类似输出:

table inet fw4 {
    chain srcnat {
        type nat hook postrouting priority srcnat; policy accept;
        oifname "br-lan" ip saddr 192.168.6.0/24 masquerade
        oifname "br-lan" ip saddr 192.168.192.0/18 masquerade
        ...
    }
}

防火墙状态说明:

/etc/init.d/firewall status 显示 inactive 或 active with no instances 是正常现象,不代表防火墙没工作。

正确的验证方法:

nft list tables | grep fw4
nft list chain inet fw4 srcnat

如果能看到 table inet fw4 和 SNAT 规则,说明防火墙正常工作。

八、验证配置

  1. 验证基础网络配置

    在 OpenWrt 上:

    ip addr show br-lan
    ip route show | grep default
    ping -c 4 192.168.1.1

    在客户端(如 192.168.6.2):

    ipconfig /all
    ping 192.168.6.1
  2. 验证 SNAT 规则
    nft list chain inet fw4 srcnat
  3. 验证下一跳分流

    在客户端执行:

    tracert -d www.baidu.com

    应该看到第2跳是 192.168.1.2(OpenWrt 旁路由)

  4. 验证 OpenClash

    在 OpenWrt 上:

    ps w | grep -E "clash|mihomo|openclash" | grep -v grep
    netstat -lntp | grep -E "7890|7891|7892|7893"
    nslookup www.baidu.com

    在客户端测试加速服务:

    curl.exe -m 10 -U "Clash:密码" -x http://192.168.1.2:7890 http://ip.sb

    应该显示加速出口 IP,不是本地 IP

  5. 完整链路测试

    开启 iKuai 下一跳规则后,在客户端测试:

    Test-NetConnection www.baidu.com -Port 443
    curl.exe http://ip.sb

    应该能正常访问,不再出现 TTL expired

九、常见问题排查

  1. TTL expired 错误

    现象:ping www.baidu.com 返回 Reply from 192.168.1.2: TTL expired in transit

    原因:缺少 SNAT 规则

    解决:添加 SNAT 规则(见第七步)

  2. Fake-IP 问题(ping 返回 198.18.x.x)

    现象:ping www.baidu.com 返回 PING www.baidu.com (198.18.0.8)

    原因:OpenClash 使用了 Fake-IP 模式

    解决:

    • 在 OpenClash Web 界面:模式设置运行模式改为 Redir-Host
    • 在 OpenClash Web 界面:DNS 设置 → 关闭 DNS 代理和 DNS 劫持
    • 确保配置文件里 enhanced-mode: redir-host
    • 重启 OpenClash 和 dnsmasq
    • 在 Windows 客户端执行:ipconfig /flushdns
  3. 开启下一跳后无法上网

    如何判断是"没出去"还是"没回来":

    方法一:使用 tcpdump 抓包(最准确)

    在客户端持续访问网站,在 OpenWrt 上执行:

    tcpdump -ni br-lan "src 192.168.6.2 and tcp port 443" -c 10
    tcpdump -ni br-lan "dst 192.168.6.2 and tcp port 443" -c 10

    判断标准:

    • 第一个命令能看到 SYN → 去程已到 OpenWrt(不是"没出去")
    • 第一个有 SYN,但第二个完全没回包 → 没回来(SNAT/回程路由问题)
    • 第一个完全看不到包 → 没出去(iKuai 下一跳没生效)

    方法二:使用 tracert

    在客户端执行:

    tracert -d www.baidu.com
    • 第1跳是 192.168.6.1(正常)
    • 第2跳是 192.168.1.2 → 去程到了 OpenWrt
    • 第3跳及之后全是 * * * → 从 OpenWrt 往外转发/回程断了
    • 第2跳就是 * * * → iKuai 没把流量送到 OpenWrt

    常见原因和解决方法:

    • 缺少 SNAT 规则 → 添加 SNAT 规则(见第七步)
    • 下一跳配置错误 → 下一跳必须指向 192.168.1.2,不能是 192.168.1.1
  4. 加速服务认证问题

    现象:curl -x http://192.168.1.2:7890 http://ip.sb 返回 407 Proxy Authentication Required

    原因:OpenClash 启用了代理认证

    解决:

    • 查看日志获取账号密码:tail -f /tmp/openclash.log | grep -i "账户密码"
    • 使用认证信息:curl -U "Clash:密码" -x http://192.168.1.2:7890 http://ip.sb
    • 或在 OpenClash 设置中关闭代理认证
  5. opkg update 卡住或很慢

    常见原因:

    • IPv6 优先但 IPv6 不通 → 临时禁用 IPv6:sysctl -w net.ipv6.conf.all.disable_ipv6=1
    • 系统时间不对 → 校时
    • OpenClash 劫持了路由器自身流量 → 停 OpenClash 测试
    • 切换国内镜像源(清华/中科大)

十、关键命令速查

网络相关:

ip route show
ip route get 192.168.6.2
ip addr show
/etc/init.d/network restart

防火墙相关:

/etc/init.d/firewall restart
nft list tables
nft list chain inet fw4 srcnat
nft add rule inet fw4 srcnat oifname "br-lan" ip saddr 192.168.6.0/24 masquerade

OpenClash 相关:

tail -f /tmp/openclash.log
ps w | grep -E "clash|mihomo|openclash" | grep -v grep
netstat -lntp | grep -E "7890|7891|7892|7893"
/etc/init.d/openclash restart

DNS 相关:

nslookup www.baidu.com 223.5.5.5
nslookup www.baidu.com
/etc/init.d/dnsmasq restart

加速服务测试:

curl -v --connect-timeout 3 --max-time 10 -U "Clash:密码" -x http://127.0.0.1:7890 http://ip.sb
curl.exe -m 10 -U "Clash:密码" -x http://192.168.1.2:7890 http://ip.sb

网络诊断:

tcpdump -ni br-lan "src 192.168.6.2 and tcp port 443" -c 10
tcpdump -ni br-lan "dst 192.168.6.2 and tcp port 443" -c 10
tracert -d www.baidu.com

Windows 客户端测试:

ipconfig /all
ipconfig /flushdns
Test-NetConnection www.baidu.com -Port 443 -InformationLevel Detailed
curl.exe -I --connect-timeout 5 https://www.baidu.com
tracert -d www.baidu.com

十一、易错点总结

  1. 下一跳配置错误

    错误:下一跳网关设置为 192.168.1.1(主路由自己)

    正确:下一跳网关设置为 192.168.1.2(旁路由)

  2. dnsmasq-full 安装错误

    错误:opkg install dnsmasq-full bash curl ...(与其他包一起安装)

    正确:opkg install dnsmasq-full --force-overwrite(单独强制安装)

  3. SNAT 持久化方式错误

    错误:直接写 /etc/nftables.d/99-lan2-snat.nft 文件,格式错误

    正确:使用 /etc/firewall4.user 文件,用 nft add rule 命令

  4. Fake-IP 未关闭

    错误:只改了"运行模式"为 Redir-Host,但 DNS 仍返回 198.18.x.x

    正确:同时关闭 DNS 代理和 DNS 劫持,确保配置文件里 enhanced-mode: redir-host

  5. 防火墙状态判断错误

    错误:看到 /etc/init.d/firewall status 显示 inactive 就认为防火墙没工作

    正确:用 nft list tables | grep fw4 和 nft list chain inet fw4 srcnat 验证

  6. 加速服务端口使用错误

    错误:curl -x http://127.0.0.1:7891 http://ip.sb(用 HTTP 协议访问 SOCKS5 端口)

    正确:curl -x socks5h://127.0.0.1:7891 http://ip.sb(用 SOCKS5 协议)

  7. 分区扩容时机错误

    错误:写入镜像后先重启进入 OpenWrt,再扩容分区

    正确:写入镜像后立即扩容,不要先重启

十二、如何获取准确值

  1. 如何判断防火墙类型
    nft list tables | grep fw4

    如果能看到 table inet fw4 → nftables (firewall4)

  2. 如何获取需要 SNAT 的网段

    在 iKuai 管理界面查看"端口分流"或"下一跳分流"规则的"源地址"字段

  3. 如何获取 OpenWrt 的 LAN 接口名
    uci show network.lan.ifname

    通常是 br-lan

  4. 如何获取 OpenClash 加速服务端口

    在 OpenClash Web 界面首页查看,或执行:

    netstat -lntp | grep -E "7890|7891|7892|7893"

    通常是:HTTP 7890,SOCKS5 7891,Redir 7892,Mixed 7893

  5. 如何获取 OpenClash 加速服务认证信息
    tail -f /tmp/openclash.log | grep -i "账户密码"

    通常是 Clash:密码(密码是随机生成的字符串)

  6. 如何判断是否 Fake-IP
    nslookup www.baidu.com

    如果返回 198.18.x.x → Fake-IP 已启用(需要关闭)

    如果返回真实 IP(如 110.242.69.21)→ Fake-IP 已关闭(正常)

  7. 如何判断是"没出去"还是"没回来"

    在客户端持续访问网站,在 OpenWrt 上执行:

    tcpdump -ni br-lan "src 192.168.6.2 and tcp port 443" -c 10
    tcpdump -ni br-lan "dst 192.168.6.2 and tcp port 443" -c 10
    • 第一个能看到 SYN → 去程已到 OpenWrt
    • 第一个有 SYN,但第二个完全没回包 → 没回来
    • 第一个完全看不到包 → 没出去

适用版本:OpenWrt 24.10.5, OpenClash v0.47.046

最后更新:2026-01-21