参考文章

搭建本地编译环境

  • 准备一个Ubuntu 22.04系统(实体机、虚拟机、Windows Linux子系统都可以)

  • 注意:

    1. 不要用root用户进行编译
    2. 国内用户编译前最好准备好梯子
    3. 默认登陆IP:192.168.1.1密码:password
  • 安装编译依赖

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    sudo apt update -y

    sudo apt full-upgrade -y

    sudo apt install -y ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential \
    bzip2 ccache cmake cpio curl device-tree-compiler fastjar flex gawk gettext gcc-multilib g++-multilib \
    git gperf haveged help2man intltool libc6-dev-i386 libelf-dev libfuse-dev libglib2.0-dev libgmp3-dev \
    libltdl-dev libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libpython3-dev libreadline-dev \
    libssl-dev libtool lrzsz mkisofs msmtp ninja-build p7zip p7zip-full patch pkgconf python2.7 python3 \
    python3-pyelftools python3-setuptools qemu-utils rsync scons squashfs-tools subversion swig texinfo \
    uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev
  • 拉取L大的源码

  • 其他Openwrt源码:immortalwrtopenwrt官方版x-wrt

    1
    git clone https://github.com/coolsnowwolf/lede
  • 进入lede目录

    1
    cd lede
  • 拉取校园网所需模块

    1
    2
    3
    # 加入UA2F模块和RKP-IPID模块
    git clone https://github.com/Zxilly/UA2F.git package/UA2F
    git clone https://github.com/CHN-beta/rkp-ipid.git package/rkp-ipid
  • 缝合一些其他插件

  • 添加下面代码复制到 lede源码根目录feeds.conf.default文件

    1
    2
    src-git kenzo https://github.com/kenzok8/openwrt-packages
    src-git small https://github.com/kenzok8/small
  • 更新feeds.conf.default模块

    1
    2
    ./scripts/feeds update -a
    ./scripts/feeds install -a

开始本地编译.config

  • 打开编译菜单

    1
    make menuconfig
  • 前三项根据自己的软路由选择
    型号选择.png

  • 以下为校园网防检测必选

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # 勾选上ipid
    kernel-modules -> Other modules -> kmod-rkp-ipid
    # 选上模块
    kernel modules -> Netfilter Extensions -> kmod-ipt-u32
    kernel modules -> Netfilter Extensions -> kmod-ipt-ipopt
    # 勾选上ua2f
    network -> Routing and Redirection -> ua2f
    # 选上模块
    network -> firewall -> iptables-mod-filter
    network -> firewall -> iptables-mod-ipopt
    network -> firewall -> iptables-mod-u32
    network -> firewall -> iptables-mod-conntrack-extra
  • 根据自己喜好选择插件,然后保存退出
    9aacc17c-b3de-4737-8332-4f4cccc62a59.png

  • 找到.configfeeds.conf.default文件
    10dac763-52da-4ca4-960b-9a8202ab649c.png
    34c19379-e193-49a8-9219-4abf47f35674.png

在线编译openwrt固件(Github Actions)

  • 准备自己的Github帐号,进入Actions-OpenWrt的项目

  • 把项目拉到自己的仓库
    85388b24-c8ae-4c91-9657-f1ea4cb6f0c1.png
    bddc3751-e7c6-4a3a-9c40-2ab99408246a.png

  • 编辑diy2脚本,拉取ua2frkp-ipid模块
    cd13c6c2-9827-4d96-8199-251ae1283fa8.png

    1
    2
    git clone https://github.com/Zxilly/UA2F.git package/UA2F
    git clone https://github.com/CHN-beta/rkp-ipid.git package/rkp-ipid
  • 上传.configfeeds.conf.default文件
    d0104076-f705-4e7c-90d6-fbfa2c9df844.png
    e903b584-c8cf-4e49-8dd8-9fdf1bcaa4f7.png
    4fbebf05-e54e-4c95-b51c-453aa268a1c8.png
    5f6e4fb9-2d16-4175-b0bb-0005eea60a16.png

  • 修改.config文件查找Netfilter Extensions关键词,在Netfilter Extensions下第二行后添加代码,保存

    1
    CONFIG_NETFILTER_NETLINK_GLUE_CT=y

    9d723e87-c4fa-4d98-9761-7da3a40f91be.png

  • 检查一下配置完后的文件
    6ab56c51-5e8e-4a0a-8851-684a80c0ab2c.png

  • 开始编译
    dbe7ee20-2c7a-4a99-9115-a0cf6af3c689.png
    bd8b33ca-7a3f-4483-a82b-f7d744acad18.png

  • 等待数个小时编译完成
    aeb20fcf-ed57-469e-acd2-cb3b60479fba.png
    0e1d02ad-0b10-417e-95f3-72301457a605.png
    09be37a3-00c7-46b5-b599-ac910c9480a6.png

刷入Openwrt系统

防检测配置

  • 如果不清楚自己的校园网多设备检测方式可以把以下所以防检测方法都加上
  • 常见通过设备流量特征识别多设备方式:
    1. TTL
    2. IPID
    3. 时间戳
    4. UA
  1. 统一时间戳
    • 进入OpenWRT系统设置, 勾选Enable NTP client(启用 NTP 客户端)Provide NTP server(作为 NTP 服务器提供服务
    • NTP server candidates(候选 NTP 服务器)四个框框分别填写
      1
      2
      3
      4
      ntp1.aliyun.com
      time1.cloud.tencent.com
      stdtime.gov.hk
      pool.ntp.org
    • 防火墙自定义规则
    • 其中192.168.1.1需要更改成路由器的地址,视固件而定。
    • 若你的路由器地址不在192.168.0.0/16内,最后两行都要跟着改,一般的家用路由器都在这个范围内。
      1
      2
      3
      4
      5
      6
      7
      8
      # 防时钟偏移检测

      iptables -t nat -N ntp_force_local
      iptables -t nat -I PREROUTING -p udp --dport 123 -j ntp_force_local
      iptables -t nat -A ntp_force_local -d 0.0.0.0/8 -j RETURN
      iptables -t nat -A ntp_force_local -d 127.0.0.0/8 -j RETURN
      iptables -t nat -A ntp_force_local -d 192.168.0.0/16 -j RETURN
      iptables -t nat -A ntp_force_local -s 192.168.0.0/16 -j DNAT --to-destination 192.168.1.1
  2. 统一UA(UA2F)
    • UA2F配置(SSH)
    • 点击 System -> TTYD 终端
      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
      29
      30
      31
      32
      33
      # 启用 UA2F
      uci set ua2f.enabled.enabled=1

      # 可选的防火墙配置选项
      # 是否自动添加防火墙规则
      uci set ua2f.firewall.handle_fw=1

      # 是否尝试处理 443 端口的流量, 通常来说,流经 443 端口的流量是加密的,因此无需处理
      uci set ua2f.firewall.handle_tls=1

      # 是否处理微信的流量,微信的流量通常是加密的,因此无需处理。这一规则在启用 nftables 时无效
      uci set ua2f.firewall.handle_mmtls=1

      # 是否处理内网流量,如果你的路由器是在内网中,且你想要处理内网中的流量,那么请启用这一选项
      uci set ua2f.firewall.handle_intranet=1

      # 使用自定义 User-Agent
      uci set ua2f.main.custom_ua="Mozilla/114.514 (NB; CPU NB 114_514 like NB OS X) NBWebKit/114.5.14 Version/114.514 Safari/114.514"

      # 禁用 Conntrack 标记,这会降低性能,但是有助于和其他修改 Connmark 的软件共存
      uci set ua2f.main.disable_connmark=1

      # 应用配置
      uci commit ua2f

      # 开机自启
      service ua2f enable

      # 启动 UA2F
      service ua2f start

      # 读取日志
      logread | grep UA2F
    • 检查UA2F运行是否正常
  3. 防止IPID检测
    • 防火墙自定义规则
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      # 通过 rkp-ipid 设置 IPID
      # 若没有加入rkp-ipid模块,此部分不需要加入

      iptables -t mangle -N IPID_MOD
      iptables -t mangle -A FORWARD -j IPID_MOD
      iptables -t mangle -A OUTPUT -j IPID_MOD
      iptables -t mangle -A IPID_MOD -d 0.0.0.0/8 -j RETURN
      iptables -t mangle -A IPID_MOD -d 127.0.0.0/8 -j RETURN

      #由于本校局域网是A类网,所以我将这一条注释掉了,具体要不要注释结合你所在的校园网

      # iptables -t mangle -A IPID_MOD -d 10.0.0.0/8 -j RETURN
      iptables -t mangle -A IPID_MOD -d 172.16.0.0/12 -j RETURN
      iptables -t mangle -A IPID_MOD -d 192.168.0.0/16 -j RETURN
      iptables -t mangle -A IPID_MOD -d 255.0.0.0/8 -j RETURN
      iptables -t mangle -A IPID_MOD -j MARK --set-xmark 0x10/0x10
  4. 统一TTL
    • 防火墙自定义规则
      1
      2
      3
      # 通过 iptables 修改 TTL 值 数字为需要的修改的ttl值

      iptables -t mangle -A POSTROUTING -j TTL --ttl-set 64
  5. 拒绝Flash检测
    • 防火墙自定义规则
      1
      2
      3
      # iptables 拒绝 AC 进行 Flash 检测

      iptables -I FORWARD -p tcp --sport 80 --tcp-flags ACK ACK -m string --algo bm --string " src=\"http://1.1.1." -j DROP
  6. 侵入式流量屏蔽(不常用)
    • 防火墙自定义规则
      1
      2
      3
      4
      5
      6
      7
      8
      # 侵入式流量屏蔽

      iptables -I FORWARD -p tcp -m tcp --sport 80 -m u32 --u32 "5&0xFF=0x7F" -j DROP
      iptables -I FORWARD -p tcp -m tcp --sport 8000 -m u32 --u32 "5&0xFF=0x7F" -j DROP
      iptables -I FORWARD -p tcp -m tcp --sport 8080 -m u32 --u32 "5&0xFF=0x7F" -j DROP
      iptables -I FORWARD -p tcp -m tcp --sport 80 -m u32 --u32 "5&0xFF=0x80" -j DROP
      iptables -I FORWARD -p tcp -m tcp --sport 8000 -m u32 --u32 "5&0xFF=0x80" -j DROP
      iptables -I FORWARD -p tcp -m tcp --sport 8080 -m u32 --u32 "5&0xFF=0x80" -j DROP
  7. 防火墙自定义规则总结
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    # 防时钟偏移检测

    iptables -t nat -N ntp_force_local
    iptables -t nat -I PREROUTING -p udp --dport 123 -j ntp_force_local
    iptables -t nat -A ntp_force_local -d 0.0.0.0/8 -j RETURN
    iptables -t nat -A ntp_force_local -d 127.0.0.0/8 -j RETURN
    iptables -t nat -A ntp_force_local -d 192.168.0.0/16 -j RETURN
    iptables -t nat -A ntp_force_local -s 192.168.0.0/16 -j DNAT --to-destination 192.168.1.1

    # 通过 rkp-ipid 设置 IPID
    # 若没有加入rkp-ipid模块,此部分不需要加入

    iptables -t mangle -N IPID_MOD
    iptables -t mangle -A FORWARD -j IPID_MOD
    iptables -t mangle -A OUTPUT -j IPID_MOD
    iptables -t mangle -A IPID_MOD -d 0.0.0.0/8 -j RETURN
    iptables -t mangle -A IPID_MOD -d 127.0.0.0/8 -j RETURN

    #由于本校局域网是A类网,所以我将这一条注释掉了,具体要不要注释结合你所在的校园网

    # iptables -t mangle -A IPID_MOD -d 10.0.0.0/8 -j RETURN
    iptables -t mangle -A IPID_MOD -d 172.16.0.0/12 -j RETURN
    iptables -t mangle -A IPID_MOD -d 192.168.0.0/16 -j RETURN
    iptables -t mangle -A IPID_MOD -d 255.0.0.0/8 -j RETURN
    iptables -t mangle -A IPID_MOD -j MARK --set-xmark 0x10/0x10

    # 通过 iptables 修改 TTL 值 数字为需要的修改的ttl值

    iptables -t mangle -A POSTROUTING -j TTL --ttl-set 64

    # iptables 拒绝 AC 进行 Flash 检测

    iptables -I FORWARD -p tcp --sport 80 --tcp-flags ACK ACK -m string --algo bm --string " src=\"http://1.1.1." -j DROP

    # 侵入式流量屏蔽

    iptables -I FORWARD -p tcp -m tcp --sport 80 -m u32 --u32 "5&0xFF=0x7F" -j DROP
    iptables -I FORWARD -p tcp -m tcp --sport 8000 -m u32 --u32 "5&0xFF=0x7F" -j DROP
    iptables -I FORWARD -p tcp -m tcp --sport 8080 -m u32 --u32 "5&0xFF=0x7F" -j DROP
    iptables -I FORWARD -p tcp -m tcp --sport 80 -m u32 --u32 "5&0xFF=0x80" -j DROP
    iptables -I FORWARD -p tcp -m tcp --sport 8000 -m u32 --u32 "5&0xFF=0x80" -j DROP
    iptables -I FORWARD -p tcp -m tcp --sport 8080 -m u32 --u32 "5&0xFF=0x80" -j DROP