<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>OpenWRT on 亂筆</title>
        <link>https://blog.l3zc.com/zh-hant-tw/tags/openwrt/</link>
        <description>Recent content in OpenWRT on 亂筆</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-hant-tw</language>
        <lastBuildDate>Wed, 08 Jul 2026 17:02:34 +0800</lastBuildDate><atom:link href="https://blog.l3zc.com/zh-hant-tw/tags/openwrt/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>我的家庭網絡域名解析方案</title>
            <link>https://blog.l3zc.com/zh-hant-tw/2025/02/what-i-have-done-on-my-dns/</link>
            <pubDate>Thu, 06 Feb 2025 09:01:51 +0000</pubDate>
            <guid>https://blog.l3zc.com/zh-hant-tw/2025/02/what-i-have-done-on-my-dns/</guid>
            <description>&lt;img src=&#34;https://blog.l3zc.com/2025/02/what-i-have-done-on-my-dns/cover_hu_1bda1c3daad4bc1b.webp&#34; alt=&#34;Featured image of post 我的家庭網絡域名解析方案&#34; /&gt;&lt;p&gt;人在中國，用起 DNS 會碰到兩個問題，一個是 DNS 汙染，另一個是 DNS 洩露。想要上網上得痛快，就必須要先解決 DNS 的問題。&lt;/p&gt;&#xA;&lt;h2 id=&#34;什麼是-dns-洩露&#34;&gt;什麼是 DNS 洩露&#xA;&lt;/h2&gt;&lt;p&gt;如果你現在正在開著代理看這篇文章，可以先打開&lt;a class=&#34;link&#34; href=&#34;https://browserleaks.com/dns&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;這個網站&lt;/a&gt;檢測一下自己的 DNS 請求是否被髮送到了國內的 DNS 服務器上。&lt;/p&gt;&#xA;&lt;p&gt;&#xA;&lt;img src=&#34;https://blog.l3zc.com/2025/02/what-i-have-done-on-my-dns/image-5_hu_76c2844c94b4a181.webp&#34; alt=&#34;典型的 DNS 洩露&#34; /&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;簡單來說，當你在使用 VPN 等代理工具時，你認為你的請求不會被除了你和 VPN 提供商以外的第三方看到，然而主機的 DNS 請求卻被髮送送給了運營商的 DNS 服務器或者是公共 DNS 服務器(阿里、騰訊等)進行解析，而你的真實 IP 地址和請求的域名都會被記錄下來。如果 DNS 請求解析一些敏感網站的域名(比如電報、維基解密等)，就會被監管者注意到，從而被警告或者請去喝茶。&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;因此，正確地配置代理工具的分流策略來避免 DNS 洩露就顯得尤為重要。&lt;/p&gt;&#xA;&lt;h2 id=&#34;smartdns-的配置&#34;&gt;SmartDNS 的配置&#xA;&lt;/h2&gt;&lt;h3 id=&#34;防止-dns-洩露&#34;&gt;防止 DNS 洩露&#xA;&lt;/h3&gt;&lt;p&gt;DNS 作為上網的指路人，排在第一位的要求就是必須要快，在這樣的要求下本地部署 SmartDNS 充當家庭網絡的 DNS 服務器真的再合適不過了。關於 SmartDNS 的作用和配置技巧，以及其如何優選 CDN 加快網絡訪問速度，Sukka 的「&lt;a class=&#34;link&#34; href=&#34;https://blog.skk.moe/post/i-have-my-unique-dns-setup/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;我有特別的 DNS 配置和使用技巧&lt;/a&gt;」已經講的很好，推薦在繼續閱讀本文之前先去看看這篇文章，其中的內容我在這裡便不再贅述，我的敘述重心將會放在如何在 Luci 界面上實現這些配置。&lt;/p&gt;&#xA;&lt;p&gt;如果你和我一樣使用 OpenWRT，SmartDNS 的 Luci App 會在每次啟動時根據面板上保存的配置自動生成新的配置文件，所以，不要直接修改&lt;code&gt;/etc/smartdns&lt;/code&gt;目錄下原有的配置文件，所有的更改都應該在 Luci App 裡操作。&lt;/p&gt;&#xA;&lt;p&gt;基本上，SmartDNS 上游數量越多越好，因為較多的上游並不會影響 SmartDNS 的性能&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;，並且多個上游可以增加冗餘。為了防止 DNS 洩露，在配置上游時，應當在默認分組添加國外 DNS 上游（當然，最好是加密 DNS），並將國內的服務器歸入一個單獨的分組（例如&lt;code&gt;domestic&lt;/code&gt;），並加上&lt;code&gt;-exclude-default-group&lt;/code&gt;的額外參數以將它們從默認分組中排除。&lt;/p&gt;&#xA;&lt;p&gt;&#xA;&lt;img src=&#34;https://blog.l3zc.com/2025/02/what-i-have-done-on-my-dns/image_hu_bd77370d9a6d2fcd.webp&#34; alt=&#34;國內上游的分組設置&#34; /&gt;&#xA; &#xA;&lt;img src=&#34;https://blog.l3zc.com/2025/02/what-i-have-done-on-my-dns/image-1_hu_1ba4737b13c17f98.webp&#34; alt=&#34;一些可供參考的上游&#34; /&gt;&#xA;&lt;/p&gt;&#xA;&lt;h3 id=&#34;加速國內域名解析&#34;&gt;加速國內域名解析&#xA;&lt;/h3&gt;&lt;p&gt;設置好國外上游，DNS 洩露的問題就解決了，但因為我們在默認分組中排除了國內上游，訪問新的域名時需要等待國外上游返回結果，這顯然會拖慢國內網站的訪問速度，並且還會劣化 CDN。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/felixonmars/dnsmasq-china-list&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;dnsmasq-china-list&lt;/a&gt; 是 Felix Yan 的項目，目前支持通過 Makefile 生成 SmartDNS 格式的配置文件，目前已經有人做好了現成的 Github Action 每天自動更新，直接下載就可以了，注意這些配置文件只會在國內 DNS 上游分組名稱為&lt;code&gt;domestic&lt;/code&gt;時生效。&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;cd /etc/smartdns&#xA;wget https://gcore.jsdelivr.net/gh/Olixn/china_list_for_smartdns@main/accelerated-domains.china.domain.smartdns.conf&#xA;wget https://gcore.jsdelivr.net/gh/Olixn/china_list_for_smartdns@main/apple.china.domain.smartdns.conf&#xA;wget https://gcore.jsdelivr.net/gh/Olixn/china_list_for_smartdns@main/chinalist.domain.smartdns.conf&#xA;wget https://gcore.jsdelivr.net/gh/Olixn/china_list_for_smartdns@main/google.china.domain.smartdns.conf&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;隨後在 SmartDNS 中引入這些配置文件，將下面的內容粘貼到「自定義設置」欄的末尾。&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;conf-file /etc/smartdns/accelerated-domains.china.domain.smartdns.conf&#xA;conf-file /etc/smartdns/apple.china.domain.smartdns.conf&#xA;conf-file /etc/smartdns/chinalist.domain.smartdns.conf&#xA;conf-file /etc/smartdns/google.china.domain.smartdns.conf&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#xA;&lt;img src=&#34;https://blog.l3zc.com/2025/02/what-i-have-done-on-my-dns/image-2_hu_92b3727e74c74e1a.webp&#34; alt=&#34;引入配置文件&#34; /&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;這樣配置之後，國內域名的訪問速度便不再會受到影響，訪問國外域名時，也不會再有 DNS 洩露的問題了。&lt;/p&gt;&#xA;&lt;p&gt;&#xA;&lt;img src=&#34;https://blog.l3zc.com/2025/02/what-i-have-done-on-my-dns/image-6_hu_d5c1130c9fef193d.webp&#34; alt=&#34;在無代理的情況下防止 DNS 洩露&#34; /&gt;&#xA;&lt;/p&gt;&#xA;&lt;h3 id=&#34;去廣告&#34;&gt;去廣告&#xA;&lt;/h3&gt;&lt;p&gt;DNS 層面的去廣告效果有限，重點應該放在防止誤殺上，所以不要用那臭名昭著&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;的號稱自己是「致力於成為中文區命中率最高的廣告過濾列表」的 Anti AD，而是使用一些別的規則。個人使用的規則是 &lt;a class=&#34;link&#34; href=&#34;https://github.com/217heidai/adblockfilters&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;217heidai/adblockfilters&lt;/a&gt;，這是一個已經整理好的聚合規則，直接拉取即可。&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-shell&#34;&gt;wget -O /etc/smartdns/adblock.conf https://gcore.jsdelivr.net/gh/217heidai/adblockfilters@main/rules/adblocksmartdns.conf&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;最後引入配置文件：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;conf-file /etc/smartdns/adblock.conf&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;自動更新規則&#34;&gt;自動更新規則&#xA;&lt;/h3&gt;&lt;p&gt;設置如下 Crontab 即可在每天凌晨三點自動更新所有規則。&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-crontab&#34;&gt;0 0 3 * * ?  wget -O /etc/smartdns/adblock.conf https://gcore.jsdelivr.net/gh/217heidai/adblockfilters@main/rules/adblocksmartdns.conf&#xA;0 0 3 * * ? wget -O /etc/smartdns/accelerated-domains.china.domain.smartdns.conf https://gcore.jsdelivr.net/gh/Olixn/china_list_for_smartdns@main/accelerated-domains.china.domain.smartdns.conf&#xA;0 0 3 * * ? wget -O /etc/smartdns/apple.china.domain.smartdns.conf https://gcore.jsdelivr.net/gh/Olixn/china_list_for_smartdns@main/apple.china.domain.smartdns.conf&#xA;0 0 3 * * ? wget -O /etc/smartdns/chinalist.domain.smartdns.conf https://gcore.jsdelivr.net/gh/Olixn/china_list_for_smartdns@main/chinalist.domain.smartdns.conf&#xA;0 0 3 * * ? wget -O /etc/smartdns/google.china.domain.smartdns.conf https://gcore.jsdelivr.net/gh/Olixn/china_list_for_smartdns@main/google.china.domain.smartdns.conf&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;旁路由可以用嗎&#34;&gt;旁路由可以用嗎&#xA;&lt;/h3&gt;&lt;p&gt;除非不使用 IPv6，否則最好還是將 OpenWRT 路由器作為主路由。在作為旁路由的情況下，某些系統（說的就是你，Windows）會不遵守旁路由廣播的 IPv4 DNS，而執意使用運營商光貓廣播的 IPv6 DNS 進行解析，我嘗試修改過一些相關的註冊表鍵值，但毫無作用。無奈只好讓運營商上門將光貓改為橋接模式，並將 OpenWRT 用作主路由。&lt;/p&gt;&#xA;&lt;h2 id=&#34;覆寫-clash-規則&#34;&gt;覆寫 Clash 規則&#xA;&lt;/h2&gt;&lt;p&gt;這時如果你開著 Clash 去跑 DNS 洩露測試，大概率還是會看到你的 DNS 請求被髮到了中國的 DNS 服務器上——幾乎所有機場的默認配置都會使用騰訊、阿里等國內大廠的加密 DNS，雖然不至於明文洩露到運營商 DNS 而導致你接到反詐中心的電話，但總讓人膈應 &lt;del&gt;（強迫症犯了）&lt;/del&gt;，更有甚者甚至完全沒有相關配置。&lt;/p&gt;&#xA;&lt;p&gt;好在如果使用的是 Clash Verge Rev，那麼可以很方便的覆寫機場的配置，這裡分享我的覆寫配置，將其粘貼到全局擴展配置中即可覆寫機場的配置。&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-yaml&#34;&gt;dns:&#xA;  enable: true&#xA;  ipv6: false&#xA;  prefer-h3: true&#xA;  use-system-hosts: true&#xA;  nameserver:&#xA;    - &#34;https://dns.cloudflare.com/dns-query&#34;&#xA;    - &#34;https://dns.sb/dns-query&#34;&#xA;    - &#34;https://dns.google/dns-query&#34;&#xA;    - &#34;https://public.dns.iij.jp/dns-query&#34;&#xA;    - &#34;https://jp.tiar.app/dns-query&#34;&#xA;    - &#34;https://jp.tiarap.org/dns-query&#34;&#xA;  nameserver-policy:&#xA;    &#34;geosite:cn&#34;:&#xA;      - system&#xA;  fallback:&#xA;    - &#34;tls://8.8.4.4&#34;&#xA;    - &#34;tls://1.1.1.1&#34;&#xA;  proxy-server-nameserver:&#xA;    - &#34;https://doh.pub/dns-query&#34;&#xA;    - &#34;https://223.5.5.5/dns-query&#34;&#xA;  direct-nameserver:&#xA;    - system&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&#xA;&lt;img src=&#34;https://blog.l3zc.com/2025/02/what-i-have-done-on-my-dns/image-3_hu_92a7537b0aa409b3.webp&#34; alt=&#34;如何修改全局擴展配置&#34; /&gt;&#xA;&lt;/p&gt;&#xA;&lt;h3 id=&#34;配置解析&#34;&gt;配置解析&#xA;&lt;/h3&gt;&lt;p&gt;根據 Mihomo 文檔&lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt;，其 DNS 請求的流程如下：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-mermaid&#34;&gt;flowchart TD&#xA;  Start[客戶端發起請求] --&gt; rule[匹配規則]&#xA;  rule --&gt;  Domain[匹配到基於域名的規則]&#xA;  rule --&gt; IP[匹配到基於 IP 的規則]&#xA;&#xA;  Domain --&gt; |域名匹配到直連規則|DNS&#xA;  IP --&gt; DNS[通過 Clash DNS 解析域名]&#xA;&#xA;&#xA;  Domain --&gt; |域名匹配到代理規則|Remote[通過代理服務器解析域名並建立連接]&#xA;&#xA;  Cache --&gt; |Redir-host/FakeIP-Direct 未命中|NS[匹配 nameserver-policy 並查詢 ]&#xA;  Cache --&gt; |Cache 命中|Get&#xA;  Cache --&gt; |FakeIP 未命中,代理域名|Remote&#xA;&#xA;  NS --&gt; |匹配成功| Get[將查詢到的 IP 用於匹配 IP 規則]&#xA;  NS --&gt; |沒匹配到| NF[nameserver/fallback 併發查詢]&#xA;&#xA;  NF --&gt; Get[查詢得到 IP]&#xA;  Get --&gt; |緩存 DNS 結果|Cache[(Cache)]&#xA;  Get --&gt; S[通過 IP 直接/通過代理建立連接]&#xA;&#xA;  DNS --&gt; Redir-host/FakeIP&#xA;  Redir-host/FakeIP --&gt; |查詢 DNS 緩存|Cache&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;其中&lt;code&gt;nameserver-policy&lt;/code&gt;的優先級高於&lt;code&gt;nameserver&lt;/code&gt;和&lt;code&gt;fallback&lt;/code&gt;，指定&lt;code&gt;geosite:cn&lt;/code&gt;中的網站以系統 DNS 查詢，也就是使用之前配置好的 SmartDNS 查詢，可以享受到局域網級別的響應速度和自帶測速的 CDN 選擇。而不在&lt;code&gt;geosite:cn&lt;/code&gt;中的網站則使用&lt;code&gt;nameserver/fallback&lt;/code&gt;查詢，使用國外加密上游就可以確保解析結果的可信並防止 DNS 洩露。&lt;/p&gt;&#xA;&lt;h3 id=&#34;替換-geoip-和-geosite-數據庫&#34;&gt;替換 geoip 和 geosite 數據庫&#xA;&lt;/h3&gt;&lt;p&gt;Mihomo 默認使用 V2Ray 官方的 geoip 和 geosite 數據庫，這個數據庫其實不太全，而且更新的頻率也很慢，所以我還是用 &lt;a class=&#34;link&#34; href=&#34;https://github.com/Loyalsoldier/v2ray-rules-dat&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Loyalsoldier/v2ray-rules-dat&lt;/a&gt; 這個「加強版」數據庫替換了原來的數據庫，只需下載&lt;code&gt;geoip.dat&lt;/code&gt;和&lt;code&gt;geosite.dat&lt;/code&gt;以後丟進內核目錄即可。當然，也可以新增幾行覆寫配置以實現自動/一鍵更新：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-yaml&#34;&gt;geodata-mode: true&#xA;geox-url:&#xA;  geoip: &#34;https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat&#34;&#xA;  geosite: &#34;https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat&#34;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;clash-meta-for-android&#34;&gt;Clash Meta For Android&#xA;&lt;/h3&gt;&lt;p&gt;對於手機上的 Clash Meta For Android（以下簡稱 Clash），覆寫設置時需要更加考慮手機的實際情況。&lt;/p&gt;&#xA;&lt;p&gt;首先手機上的 Clash 覆寫設置選項就不如桌面端的 Clash Verge Rev 這麼靈活，很多鍵值都不能覆寫。另外，手機不像電腦，需要經常切換網絡環境，這就導致系統 DNS 也會換得很頻繁，經測試，在這種情況下，每次更換網絡環境都需要開關一次 Clash 才能讓其更新&lt;code&gt;system&lt;/code&gt;所代表的 DNS。於是我們只能退而求其次，固定一個國內加密 DNS 作為國內查詢。&lt;/p&gt;&#xA;&lt;p&gt;進入 Clash -&amp;gt;「設置」-&amp;gt;「覆寫」以下是所有覆寫設置：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;「DNS」-&amp;gt;「策略」：強制啟用&lt;/li&gt;&#xA;&lt;li&gt;「DNS」-&amp;gt;「Prefer h3」：已啟用&lt;/li&gt;&#xA;&lt;li&gt;「DNS」-&amp;gt;「Name Server」：添加兩個國外加密 DNS&lt;/li&gt;&#xA;&lt;li&gt;「DNS」-&amp;gt;「Name Server 策略」：在「鍵」一欄中填寫&lt;code&gt;geosite:cn&lt;/code&gt;，值一欄填寫&lt;code&gt;https://doh.pub/dns-query&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;提前從 Github 上下載&lt;code&gt;geoip.dat&lt;/code&gt;和&lt;code&gt;geosite.dat&lt;/code&gt;，最後進入 Clash -&amp;gt;「設置」-&amp;gt;「Meta Features」，分別用「導入 GeoIP 數據庫」和「導入 GeoSite 數據庫」功能導入它們。&lt;/p&gt;&#xA;&lt;h2 id=&#34;完成&#34;&gt;完成&#xA;&lt;/h2&gt;&lt;p&gt;最後再打開一個 &lt;a class=&#34;link&#34; href=&#34;https://browserleaks.com/dns&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;DNS 洩露測試&lt;/a&gt;，看一看問題是否解決，如果不再出現國內的 DNS，說明配置正確，好好享受 SmartDNS 和 Clash 帶來的網絡優化和防洩漏吧~&lt;/p&gt;&#xA;&lt;p&gt;&#xA;&lt;img src=&#34;https://blog.l3zc.com/2025/02/what-i-have-done-on-my-dns/image-4_hu_fb37d196f4006eaa.webp&#34; alt=&#34;DNS 不再洩露&#34; /&gt;&#xA;&lt;/p&gt;&#xA;&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;&#xA;&lt;hr&gt;&#xA;&lt;ol&gt;&#xA;&lt;li id=&#34;fn:1&#34;&gt;&#xA;&lt;p&gt;參考自: &lt;a class=&#34;link&#34; href=&#34;https://blog.lololowe.com/posts/8f1e/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://blog.lololowe.com/posts/8f1e/&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:2&#34;&gt;&#xA;&lt;p&gt;SmartDNS 在設計時就考慮到了延遲問題，具體機制可以參考「&lt;a class=&#34;link&#34; href=&#34;https://blog.skk.moe/post/i-have-my-unique-dns-setup/#%E4%B8%AD%E5%9C%BA%E4%BC%91%E6%81%AF%EF%BC%9ASmartDNS-%E6%98%AF%E5%A6%82%E4%BD%95%E9%81%BF%E5%85%8D%E5%9B%A0%E6%B5%8B%E9%80%9F%E5%AF%BC%E8%87%B4-DNS-%E8%A7%A3%E6%9E%90%E8%BF%87%E6%85%A2%E7%9A%84&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;中場休息：SmartDNS 是如何避免因測速導致 DNS 解析過慢的&lt;/a&gt;」。&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:3&#34;&gt;&#xA;&lt;p&gt;有人整理了 &lt;a class=&#34;link&#34; href=&#34;https://github.com/Mosney/anti-anti-AD&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Anti AD 的光榮事蹟&lt;/a&gt;。&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:4&#34;&gt;&#xA;&lt;p&gt;引用自: &lt;a class=&#34;link&#34; href=&#34;https://wiki.metacubex.one/config/dns/diagram/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://wiki.metacubex.one/config/dns/diagram/&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:4&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/div&gt;&#xA;</description>
        </item><item>
            <title>長沙理工大學：校園網共享指南</title>
            <link>https://blog.l3zc.com/zh-hant-tw/2023/09/csust-network-guide/</link>
            <pubDate>Sat, 23 Sep 2023 21:49:21 +0000</pubDate>
            <guid>https://blog.l3zc.com/zh-hant-tw/2023/09/csust-network-guide/</guid>
            <description>&lt;img src=&#34;https://blog.l3zc.com/2023/09/csust-network-guide/20231011111126_hu_205eb763ec973318.webp&#34; alt=&#34;Featured image of post 長沙理工大學：校園網共享指南&#34; /&gt;&lt;p&gt;2016年11月7日通過的《&lt;a class=&#34;link&#34; href=&#34;http://www.cac.gov.cn/2016-11/07/c_1119867116.htm&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;中華人民共和國網絡安全法&lt;/a&gt;》第二十四條規定，「網絡運營者為用戶辦理網絡接入、域名註冊服務，辦理固定電話、移動電話等入網手續，或者為用戶提供信息發佈、即時通訊等服務，在與用戶簽訂協議或者確認提供服務時，應當要求用戶提供真實身份信息。用戶不提供真實身份信息的，網絡運營者不得為其提供相關服務。」&lt;/p&gt;&#xA;&lt;p&gt;到了教育部這裡落實，就變成了校園網一人一號。再到運營商這裡，就變成了一人一終端，還不準使用路由器。這顯然已經和合規沒有任何關係，學生的需求也擺在這裡，但限制卻還是這個鳥樣。好一點的大學，比如上海交大這種坐擁華東教育骨幹網的學校可以做到校園網免費，為什麼我們甚至不能放開連接設備數量上的限制呢？&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;2015年以來……目前，我校IPV4/IPV6總出口帶寬達到47GB，其中電信25GB、聯通10GB、移動10GB、教育網2GB，校園網總註冊用戶數超過4.34萬、活躍用戶數超過2.43萬。辦公賬戶（免費）帶寬由2MB升到36MB。宿舍區基本賬戶（付費）帶寬由2MB升到12MB，網費不變。……&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;這套&lt;a class=&#34;link&#34; href=&#34;https://www.csust.edu.cn/xxhjs/xxhcgzs/wljcjs.htm&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;數據&lt;/a&gt;應該不是最新的，2022年寒假校園網又進行了一次大擴容，具體擴容了多少不得而知。如果按照這套數據計算，總出口 47GB，活躍用戶數2.43萬，則人均帶寬是$ \dfrac{47GB _ 1000 _ 8}{24300} \approx 15Mbps $。這點可憐的帶寬，還要給學校的官網防 DDoS，加上網安等種種因素，就變成了一人一終端這種限制。&lt;/p&gt;&#xA;&lt;p&gt;現在的大學生還有幾人是有且只有一臺上網設備的？室友間的一些操作也需要一套局域網環境（文件共享、聯機遊戲……）指望推動學校在短時間做出這套改變不太現實。但需求總要解決，只能先自己想想辦法，從技術上解決這個矛盾了。&lt;/p&gt;&#xA;&lt;p&gt;&lt;del&gt;Update 2023/10/7：可能是部署了新設備，經測試，在敏行軒，本文措施失效——即使部署所有措施，依舊會頻繁被檢測。雖然我的腳本可以自動讓路由器重新上線，但上網體驗會變得很差，遊戲更是幾乎不可能。那麼，敏行軒大概率是部署了新的檢測方法，基本只剩加密所有流量這一條路可走。&lt;/del&gt;&lt;/p&gt;&#xA;&lt;p&gt;Update 2023/10/16：現在在敏行軒（其他區塊只會更寬鬆），最有效也最簡單的辦法就是用 Clash 代理所有流量（即使全局直連也可以），具體方法文章後段有詳細說明。&lt;/p&gt;&#xA;&lt;h2 id=&#34;硬件&#34;&gt;硬件&#xA;&lt;/h2&gt;&lt;p&gt;需要一臺可以刷入 OpenWRT 的路由器，我採用的是一臺 Nano Pi R2S，最好選擇這種用戶基數大固件多的產品，也最好能自己編譯固件。&lt;/p&gt;&#xA;&lt;p&gt;關於如何為路由器刷入 OpenWRT 請自行在網上搜索對應的路由器型號+教程。不建議購買所謂的「校園網路由器」，這種路由器通常價格比同性能路由器貴非常多，而且賣的人還不一定懂技術。&lt;/p&gt;&#xA;&lt;h2 id=&#34;接入路由器&#34;&gt;接入路由器&#xA;&lt;/h2&gt;&lt;p&gt;通過一段時間的觀察，可以得到我校校園網前端的計費系統採用城市熱點的 Dr.COM，這是一套非常常見的計費系統；BRAS 終端是銳捷的設備，採用 POE 方式連接銳捷的 AP，似乎沒有參與認證。&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;daemon.info pppd[8599]: CHAP authentication succeeded: Welcome to Drcom System:&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;我將校園網分為三大類接入方式，無線，辦公區有線，學生公寓有線。&lt;/p&gt;&#xA;&lt;p&gt;前兩者都是 DHCP+Portal 驗證，網頁表單提交賬號即可完成驗證。學生公寓區域的有線設備通過 PPPoE 認證，賬號信息就是校園網賬號本身。&lt;/p&gt;&#xA;&lt;p&gt;因此路由的接入方式便確定了。&lt;strong&gt;宿舍的有線直接 PPPoE 認證就可以正常上網了。對於 Portal 的要麻煩一些，若無法連接外網則判斷 Portal 能否訪問，能訪問的話提交一個構造好的 POST 包登錄即可。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Portal 認證的腳本校友已經寫過不少：&lt;/p&gt;&#xA;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/linfangzhi/CSUST_network_auto_login&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://github.com/linfangzhi/CSUST_network_auto_login&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/eigeen/csust-cn-login&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://github.com/eigeen/csust-cn-login&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/colawithsauce/csust-network-login&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://github.com/colawithsauce/csust-network-login&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;路由器上安好 &lt;code&gt;python&lt;/code&gt; 和 &lt;code&gt;requests&lt;/code&gt; 庫然後運行這些腳本即可。如果因無網絡不能安裝，重新編譯一個固件就行。再不行就寫一個 Shell 腳本登錄。&lt;/p&gt;&#xA;&lt;h2 id=&#34;封鎖狀況&#34;&gt;封鎖狀況&#xA;&lt;/h2&gt;&lt;p&gt;此時已經可以通過路由器上網了，但依然不能全寢共享。&lt;/p&gt;&#xA;&lt;p&gt;校園網多設備共享很被檢測到會被臨時屏蔽，此時會屏蔽所有的網絡流量，&lt;del&gt;據說還會強制重定向所有 HTTP 請求到&lt;code&gt;http://1.1.1.3/remind/proxy_remind.htm?tm=8&lt;/code&gt;，不過我是沒有遇上。&lt;/del&gt;&lt;/p&gt;&#xA;&lt;p&gt;Update: 會強制重定向到以下網頁：&lt;/p&gt;&#xA;&lt;p&gt;&#xA;&lt;img src=&#34;https://blog.l3zc.com/2023/09/csust-network-guide/202310061517550_hu_48b0ca21cd12235.webp&#34; alt=&#34;校園網共享檢測提示&#34; /&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;查閱資料發現，檢測是否多設備共享有兩種思路，一種是通過設備流量特徵識別：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;TTL&lt;/li&gt;&#xA;&lt;li&gt;IPID&lt;/li&gt;&#xA;&lt;li&gt;時間戳&lt;/li&gt;&#xA;&lt;li&gt;UA&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;另一種是侵入式流量審計，這個可能看學校，不過我校肯定是有的：&lt;/p&gt;&#xA;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;增強網絡安全防護能力。……部署&lt;strong&gt;出口防火牆、出口行為審計&lt;/strong&gt;……、IPS(入侵防禦)等安全設備系統，加固學校網絡和信息系統的整體安全。&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;通過一次喊人來寢室修網絡得知肯定是深信服的設備。&lt;/p&gt;&#xA;&lt;p&gt;通過路由器裸奔一段時間發現如下規律：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;兩臺不同平臺的產品（如 Windows 電腦和 iPad）同時上網會在較短時間內被封鎖&lt;/li&gt;&#xA;&lt;li&gt;封鎖時用代理可以連出去，B 站也能看，其他的不行，甚至無法 Ping 通校外 IP&lt;/li&gt;&#xA;&lt;li&gt;被封鎖後重新認證也無法上網，更換 MAC 地址後才能恢復&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;得出的結論是大概率通過 UA 識別，檢測到後封禁當前 MAC 地址一段時間。&lt;/p&gt;&#xA;&lt;h2 id=&#34;流量處理&#34;&gt;流量處理&#xA;&lt;/h2&gt;&lt;h3 id=&#34;統一-ttl&#34;&gt;統一 TTL&#xA;&lt;/h3&gt;&lt;p&gt;將這行規則加入路由器的「網絡」-「防火牆」-「自定義規則」（下同），即可統一 TTL 為 65，其中&lt;code&gt;-o br-lan&lt;/code&gt;可以視情況更換，如&lt;code&gt;eth0&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-shell&#34;&gt;iptables -t mangle -I POSTROUTING -o br-lan -j TTL --ttl-set 65&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;這條規則用到了 &lt;code&gt;ipopt&lt;/code&gt; 模塊，在官方編譯的固件或其他一些極簡的固件裡默認不會安裝。這種情況下用&lt;code&gt;opkg&lt;/code&gt;安裝即可：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-shell&#34;&gt;opkg update&#xA;opkg install iptables-mod-ipopt&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;保存規則並重啟防火牆，在電腦上隨便 Ping 一個網站看 TTL 是否為 65（不要在路由器上 Ping，除非你知道你在幹什麼）。&lt;/p&gt;&#xA;&lt;h3 id=&#34;統一時間戳&#34;&gt;統一時間戳&#xA;&lt;/h3&gt;&lt;p&gt;接下來先啟用 OpenWrt 自帶的 NTP 服務器，然後劫持所有局域網內的 NTP 請求到路由器，以達到我們統一時間戳的目的。&lt;/p&gt;&#xA;&lt;p&gt;這種方法並不完美，因為手機連接基站時會同步到別的 NTP 服務器，最好的辦法是直接去除 TCP 包的時間戳，但這種方法暫無成熟的實現，只能先採用劫持 NTP 請求的辦法。&lt;/p&gt;&#xA;&lt;p&gt;只需要在管理頁面中修改幾個設置就可以了。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;點擊 System -&amp;gt; System（系統）&lt;/li&gt;&#xA;&lt;li&gt;勾選 Enable NTP client（啟用 NTP 客戶端）和 Provide NTP server（作為 NTP 服務器提供服務）。&lt;/li&gt;&#xA;&lt;li&gt;NTP server candidates（候選 NTP 服務器）按需設置，可以使用阿里雲的 NTP 服務器：&lt;code&gt;ntp.aliyun.com&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;點擊 Save &amp;amp; Apply 按鈕。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;向防火牆添加以下規則：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-shell&#34;&gt;iptables -t nat -N ntp_force_local&#xA;iptables -t nat -I PREROUTING -p udp --dport 123 -j ntp_force_local&#xA;iptables -t nat -A ntp_force_local -d 0.0.0.0/8 -j RETURN&#xA;iptables -t nat -A ntp_force_local -d 127.0.0.0/8 -j RETURN&#xA;iptables -t nat -A ntp_force_local -d 192.168.0.0/16 -j RETURN&#xA;iptables -t nat -A ntp_force_local -s 192.168.0.0/16 -j DNAT --to-destination 192.168.1.1&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;其中&lt;code&gt;192.168.1.1&lt;/code&gt;需要更改成路由器的地址，視固件而定。&lt;/p&gt;&#xA;&lt;p&gt;若你的路由器地址不在&lt;code&gt;192.168.0.0/16&lt;/code&gt;內，最後兩行都要跟著改，一般的家用路由器都在這個範圍內。&lt;/p&gt;&#xA;&lt;p&gt;Windows 下確認效果：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-cmd&#34;&gt;w32tm /stripchart /computer:baidu.com /dataonly /samples:5&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;如果能正常同步就證明配置成功了。&lt;/p&gt;&#xA;&lt;h3 id=&#34;統一-ua&#34;&gt;統一 UA&#xA;&lt;/h3&gt;&lt;p&gt;網上的解決方案大部分基於代理，比如 Privoxy，甚至 Clash。還有不少是通過&lt;a class=&#34;link&#34; href=&#34;https://github.com/CHN-beta/xmurp-ua&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;XMURP-UA&lt;/a&gt;直接在內核層面處理 UA，這幾年又有新的插件出來，比如&lt;a class=&#34;link&#34; href=&#34;https://github.com/Zxilly/UA2F&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;UA2F&lt;/a&gt;。&lt;/p&gt;&#xA;&lt;h4 id=&#34;方案一ua2f&#34;&gt;方案一：UA2F&#xA;&lt;/h4&gt;&lt;p&gt;編譯固件時自定義加入&lt;code&gt;ua2f&lt;/code&gt;和&lt;code&gt;luci-app-ua2f&lt;/code&gt;，R2S 可以在&lt;a class=&#34;link&#34; href=&#34;https://files.l3zc.com/d/R2S/openwrt-10.07.2023-rockchip-armv8-friendlyarm_nanopi-r2s-squashfs-sysupgrade.img.gz&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;這裡&lt;/a&gt;下載編譯好的。UA2F 與 Turbo ACC 衝突，即使沒有使用 Turbo ACC 也記得要關掉「全雛形 NAT」和「軟件流量分載」這兩個功能。&lt;/p&gt;&#xA;&lt;p&gt;完成後啟動 UA2F 再打開&lt;a class=&#34;link&#34; href=&#34;http://ua.233996.xyz/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;ua.233996.xyz&lt;/a&gt;就會發現自己的 UA 已經被修改了。&lt;/p&gt;&#xA;&lt;h4 id=&#34;方案二privoxy&#34;&gt;方案二：Privoxy&#xA;&lt;/h4&gt;&lt;p&gt;安裝好 Privoxy 並正確配置，然後將所有 HTTP 流量轉發給 Privoxy 代理，並在 Privoxy 中替換 UA。&lt;/p&gt;&#xA;&lt;h5 id=&#34;安裝-privoxy&#34;&gt;安裝 Privoxy&#xA;&lt;/h5&gt;&lt;pre&gt;&lt;code class=&#34;language-shell&#34;&gt;opkg update&#xA;opkg install luci-app-privoxy&#xA;opkg install luci-app-privoxy-zh-cn&lt;/code&gt;&lt;/pre&gt;&lt;h5 id=&#34;配置-privoxy&#34;&gt;配置 Privoxy&#xA;&lt;/h5&gt;&lt;p&gt;點擊 Services -&amp;gt; Privoxy WEB proxy。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Files and Directories（文件和目錄）：Action Files 刪除到只剩一個框，填入 &lt;code&gt;match-all.action&lt;/code&gt;。Filter files 和 Trust files 均留空。&lt;/li&gt;&#xA;&lt;li&gt;Access Control（訪問控制）：Listen addresses 填寫 &lt;code&gt;0.0.0.0:8118&lt;/code&gt;，Permit access 填寫 &lt;code&gt;192.168.0.0/16&lt;/code&gt;。Enable action file editor 勾選。&lt;/li&gt;&#xA;&lt;li&gt;Miscellaneous（雜項）：Accept intercepted requests 勾選。&lt;/li&gt;&#xA;&lt;li&gt;Logging（日誌）：全部取消勾選。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;點擊 Save &amp;amp; Apply。&lt;/p&gt;&#xA;&lt;h5 id=&#34;配置防火牆轉發&#34;&gt;配置防火牆轉發&#xA;&lt;/h5&gt;&lt;p&gt;向路由器防火牆添加以下規則：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-shell&#34;&gt;iptables -t nat -N http_ua_drop&#xA;iptables -t nat -I PREROUTING -p tcp --dport 80 -j http_ua_drop&#xA;iptables -t nat -A http_ua_drop -d 0.0.0.0/8 -j RETURN&#xA;iptables -t nat -A http_ua_drop -d 127.0.0.0/8 -j RETURN&#xA;iptables -t nat -A http_ua_drop -d 192.168.0.0/16 -j RETURN&#xA;iptables -t nat -A http_ua_drop -p tcp -j REDIRECT --to-port 8118&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;在路由器的局域網中打開 &lt;code&gt;http://config.privoxy.org/edit-actions-list?f=0&lt;/code&gt;，點擊 Edit 按鈕。Action 那一列中，hide-user-agent 改選為 Enable（綠色），在右側 User Agent string to send 框中填寫 &lt;code&gt;Privoxy/1.0&lt;/code&gt;或任意 UA；其它全部選擇為 No Change （紫色）。點擊 Submit 按鈕。&lt;/p&gt;&#xA;&lt;p&gt;如果打不開這個頁面，說明之前某個地方配置有誤。&lt;/p&gt;&#xA;&lt;h5 id=&#34;確認效果&#34;&gt;確認效果&#xA;&lt;/h5&gt;&lt;p&gt;本地瀏覽器調試是看不到效果的，因為經過路由器之前 UA 會保持原樣。&lt;/p&gt;&#xA;&lt;p&gt;訪問 ua.chn.moe 以查看 UA 是否修改成功。&lt;/p&gt;&#xA;&lt;h4 id=&#34;方案三clash&#34;&gt;方案三：Clash&#xA;&lt;/h4&gt;&lt;p&gt;這種方法的思路是使用 Clash 代理/阻止所有發往 80 端口的流量。同時 Clash 也直接接管所有流量，這就意味著無需處理 IPID 和時間戳。&lt;/p&gt;&#xA;&lt;p&gt;假設你使用的是 OpenClash，方法如下：&lt;/p&gt;&#xA;&lt;p&gt;&#xA;&lt;img src=&#34;https://blog.l3zc.com/2023/09/csust-network-guide/image-20231016185450516_hu_8a219d7079c64c92.webp&#34; alt=&#34;OpenClash設置&#34; /&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;打開 OpenClash 插件面板，進入 覆寫設置 -&amp;gt; 規則設置，勾選自定義規則，將以下規則插入配置：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-yaml&#34;&gt;- DST-PORT,80,Proxy&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;其中&lt;code&gt;Proxy&lt;/code&gt;需要視配置文件的不同而更改，例如我的代理組叫做 HK，也可以直接使用節點名稱。&lt;/p&gt;&#xA;&lt;p&gt;對於沒有能力加密的同學，則使用以下規則&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-yaml&#34;&gt;- DST-PORT,80,REJECT&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Update 2023/10/31：經測試，即使不加入這條自定義規則，也足以防止檢測。但必須啟用 Clash，至少設置全局直連。&lt;/p&gt;&#xA;&lt;h3 id=&#34;防止通過-ipid-檢測&#34;&gt;防止通過 IPID 檢測&#xA;&lt;/h3&gt;&lt;p&gt;各設備的 IPID 起始值不同，並隨著包數量的上升而上升，接近一條直線，若有多個設備長時間使用後會呈現出多條上升序列。這可以用來探測是否是多個設備。&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;由於需要&lt;code&gt;kmod-rkp-ipid&lt;/code&gt;，這一步也需要編譯固件。&lt;/p&gt;&#xA;&lt;p&gt;編譯好固件後向防火牆添加以下規則：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-shell&#34;&gt;iptables -t mangle -N IPID_MOD&#xA;iptables -t mangle -A FORWARD -j IPID_MOD&#xA;iptables -t mangle -A OUTPUT -j IPID_MOD&#xA;iptables -t mangle -A IPID_MOD -d 0.0.0.0/8 -j RETURN&#xA;iptables -t mangle -A IPID_MOD -d 127.0.0.0/8 -j RETURN&#xA;iptables -t mangle -A IPID_MOD -d 10.0.0.0/8 -j RETURN&#xA;iptables -t mangle -A IPID_MOD -d 172.16.0.0/12 -j RETURN&#xA;iptables -t mangle -A IPID_MOD -d 192.168.0.0/16 -j RETURN&#xA;iptables -t mangle -A IPID_MOD -d 255.0.0.0/8 -j RETURN&#xA;iptables -t mangle -A IPID_MOD -j MARK --set-xmark 0x10/0x10&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;即可修改所有包的 IPID 為單一遞增曲線。&lt;/p&gt;&#xA;&lt;h4 id=&#34;老辦法&#34;&gt;老辦法&#xA;&lt;/h4&gt;&lt;p&gt;設置如下 crontab 即可在每天凌晨三點重新撥號以打斷檢測過程：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-shell&#34;&gt;0 3 * * * ( ifdown wan; sleep 5; ifup wan )&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;侵入式流量屏蔽&#34;&gt;侵入式流量屏蔽&#xA;&lt;/h3&gt;&lt;p&gt;向路由器防火牆添加以下規則：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-shell&#34;&gt;iptables -I FORWARD -p tcp -m tcp --sport 80 -m u32 --u32 &#34;5&amp;0xFF=0x7F&#34; -j DROP&#xA;iptables -I FORWARD -p tcp -m tcp --sport 8000 -m u32 --u32 &#34;5&amp;0xFF=0x7F&#34; -j DROP&#xA;iptables -I FORWARD -p tcp -m tcp --sport 8080 -m u32 --u32 &#34;5&amp;0xFF=0x7F&#34; -j DROP&#xA;iptables -I FORWARD -p tcp -m tcp --sport 80 -m u32 --u32 &#34;5&amp;0xFF=0x80&#34; -j DROP&#xA;iptables -I FORWARD -p tcp -m tcp --sport 8000 -m u32 --u32 &#34;5&amp;0xFF=0x80&#34; -j DROP&#xA;iptables -I FORWARD -p tcp -m tcp --sport 8080 -m u32 --u32 &#34;5&amp;0xFF=0x80&#34; -j DROP&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;以屏蔽侵入式流量，以上規則來自 V2EX 網友。&lt;/p&gt;&#xA;&lt;p&gt;這些規則用到了&lt;code&gt;iptables&lt;/code&gt;的&lt;code&gt;u32&lt;/code&gt;模塊，大多數固件都不會默認安裝，亦需要通過&lt;code&gt;opkg&lt;/code&gt;安裝：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-shell&#34;&gt;opkg update&#xA;opkg install iptables-mod-u32&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;隨後屏蔽學校的「共享提示」頁面：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-shell&#34;&gt;iptables -I FORWARD -p tcp --sport 80 --tcp-flags ACK ACK -m string --algo bm --string &#34;src=\&#34;http://1.1.1.&#34; -j DROP&#xA;iptables -I FORWARD -p tcp --sport 80 --tcp-flags ACK ACK -m string --algo bm --string &#34;value=\&#34;http://18.20.18.&#34; -j DROP&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;在Openwrt防火牆的流量規則設置如下規則：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;源區域WAN，源地址1.1.1.3，目標區域設備，動作拒絕&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;源區域WAN，源地址1.1.1.1，目標區域設備，動作拒絕&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;這些規則來源於校友的博客（找不到來源，可能已經關閉了）&lt;/p&gt;&#xA;&lt;h2 id=&#34;意外封鎖處理&#34;&gt;意外封鎖處理&#xA;&lt;/h2&gt;&lt;p&gt;前面提到學校會封一段時間的 MAC，想要重新上線就需要更換 MAC 地址重新上線。為此我寫了一個 Shell 腳本：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-shell&#34;&gt;#!/bin/sh&#xA;DATE=$(date +%Y-%m-%d-%H:%M:%S)&#xA;interface=eth0&#xA;current_mac=$(ifconfig ${interface} | grep &#34;HWaddr&#34; | awk &#39;{print$5}&#39;)&#xA;new_mac=$(dd if=/dev/random bs=1 count=3 2&gt;/dev/null | hexdump -C | head -1 | cut -d&#39; &#39; -f2- | awk &#39;{ print &#34;34:36:3b:&#34;$1&#34;:&#34;$2&#34;:&#34;$3 }&#39;)&#xA;tries=0&#xA;while [[ $tries -lt 3 ]]; do&#xA;    if /bin/ping -c 1 223.5.5.5 &gt;/dev/null; then&#xA;        echo --- exit ---&#xA;        exit 0&#xA;    fi&#xA;    tries=$((tries + 1))&#xA;done&#xA;echo ${DATE} block detected, replacing mac address &gt;&gt;watchdog.log&#xA;ifconfig down ${interface}&#xA;sleep 1&#xA;ifconfig ${interface} hw ether ${new_mac}&#xA;sleep 1&#xA;ifconfig up ${interface}&#xA;echo ${DATE} old address ${current_mac} has been replaced with ${new_mac} &gt;&gt;watchdog.log&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;將這個腳本保存到路由器的 home 目錄下（用&lt;code&gt;vim&lt;/code&gt;粘貼保存以下就可以了），設置如下 Crontab 每分鐘執行一次：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-shell&#34;&gt;* * * * * sh /root/net_watchdog.sh&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;路由器就會自每隔一分鐘檢測是否在線，如果掉線，則隨機更換 MAC 地址並重新上線，日誌將會記錄在同目錄下的&lt;code&gt;watchdog.log&lt;/code&gt;中。&lt;/p&gt;&#xA;&lt;p&gt;&#xA;&lt;img src=&#34;https://blog.l3zc.com/2023/09/csust-network-guide/202310061521451_hu_6d28176b6b97e883.webp&#34; alt=&#34;Shell自動檢測是否掉線&#34; /&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;dns-內網解析處理&#34;&gt;DNS 內網解析處理&#xA;&lt;/h2&gt;&lt;p&gt;接上路由器之後，校外資源可以正常訪問，反倒是校內資源全都無法訪問了。經排查發現是路由器下的設備無法解析出正確的 IP 地址，但路由器本身又沒有問題。&lt;/p&gt;&#xA;&lt;p&gt;暫時不清楚是什麼原因導致的，但解決起來很簡單，可以直接把已知的內網地址 dnsmasq，但我推薦安裝 SmartDNS 來解決。&lt;/p&gt;&#xA;&lt;p&gt;SmartDNS 的安裝可以參考&lt;a class=&#34;link&#34; href=&#34;https://pymumu.github.io/smartdns/install/openwrt/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;官方教程&lt;/a&gt;。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;開啟 SmartDNS 並讓其接管路由器的主 DNS&lt;/li&gt;&#xA;&lt;li&gt;設置 SmartDNS 上游為學校內網提供的 DNS，我校是&lt;code&gt;10.255.255.25&lt;/code&gt;和&lt;code&gt;10.255.255.26&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;設置別的上游，可以參考&lt;a class=&#34;link&#34; href=&#34;https://blog.skk.moe/post/i-have-my-unique-dns-setup/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;這篇博客&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;這樣設置下來，內網資源就可以正常訪問了。&lt;/p&gt;&#xA;&lt;h2 id=&#34;參考&#34;&gt;參考&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.mr-cn.net/2021/06/15/Share-your-network-in-CSUST/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://www.mr-cn.net/2021/06/15/Share-your-network-in-CSUST/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://catalog.chn.moe/%E6%8A%80%E6%9C%AF/OpenWrt/%E5%9C%A8%E5%8E%A6%E5%A4%A7%E5%AE%BF%E8%88%8D%E5%AE%89%E8%A3%85%E8%B7%AF%E7%94%B1%E5%99%A8/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://catalog.chn.moe/%E6%8A%80%E6%9C%AF/OpenWrt/%E5%9C%A8%E5%8E%A6%E5%A4%A7%E5%AE%BF%E8%88%8D%E5%AE%89%E8%A3%85%E8%B7%AF%E7%94%B1%E5%99%A8/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://catalog.chn.moe/%E6%8A%80%E6%9C%AF/OpenWrt/%E4%B8%BA%E5%95%A5%E6%88%91%E7%9A%84%E8%B7%AF%E7%94%B1%E5%99%A8%E4%BC%9A%E8%A2%AB%E6%A3%80%E6%B5%8B%E5%88%B0/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://catalog.chn.moe/%E6%8A%80%E6%9C%AF/OpenWrt/%E4%B8%BA%E5%95%A5%E6%88%91%E7%9A%84%E8%B7%AF%E7%94%B1%E5%99%A8%E4%BC%9A%E8%A2%AB%E6%A3%80%E6%B5%8B%E5%88%B0/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://superuser.com/questions/451018/how-can-i-query-an-ntp-server-under-windows&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://superuser.com/questions/451018/how-can-i-query-an-ntp-server-under-windows&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/krabelize/openwrt-random-mac-changer/tree/master&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://github.com/krabelize/openwrt-random-mac-changer/tree/master&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/CHN-beta/rkp-ipid&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://github.com/CHN-beta/rkp-ipid&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.sunbk201.site/posts/crack-campus-network&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://www.sunbk201.site/posts/crack-campus-network&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;&#xA;&lt;hr&gt;&#xA;&lt;ol&gt;&#xA;&lt;li id=&#34;fn:1&#34;&gt;&#xA;&lt;p&gt;這個配置會自動拒絕所有發往 80 端口的連接，對上網體驗影響很大。&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:2&#34;&gt;&#xA;&lt;p&gt;具體可以參考&lt;a class=&#34;link&#34; href=&#34;https://www.cs.columbia.edu/~smb/papers/fnat.pdf&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;這篇論文&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:3&#34;&gt;&#xA;&lt;p&gt;這個方法可行性比較低，沒有已知的部署案例。&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/div&gt;&#xA;</description>
        </item><item>
            <title>在OpenWRT路由器上使用iptables對英雄聯盟隨機丟包</title>
            <link>https://blog.l3zc.com/zh-hant-tw/2022/06/use-iptables-to-ban-lol-in-dorm/</link>
            <pubDate>Sun, 26 Jun 2022 23:34:25 +0000</pubDate>
            <guid>https://blog.l3zc.com/zh-hant-tw/2022/06/use-iptables-to-ban-lol-in-dorm/</guid>
            <description>&lt;p&gt;室友天天開黑，這就算了，還老是用外放，不得已，只能讓他們打不爽，從根本上阻止他們開黑，還我寢室一個安靜的環境，至少，讓他們按時睡覺。&lt;/p&gt;&#xA;&lt;!-- more --&gt;&#xA;&lt;h2 id=&#34;寢室的網絡環境&#34;&gt;寢室的網絡環境&#xA;&lt;/h2&gt;&lt;h3 id=&#34;路由器&#34;&gt;路由器&#xA;&lt;/h3&gt;&lt;p&gt;一臺撿垃圾的小米CR6608，刷入了 OpenWRT ，承擔我們寢室所有的網絡流量，由於是一所垃圾大學，校園網限制一套餐一終端，寢室裡又只有一個網絡口，大家都用我的套餐，整個寢室的網絡控制權當然在我的手上。&lt;/p&gt;&#xA;&lt;h3 id=&#34;室友上網的設備&#34;&gt;室友上網的設備&#xA;&lt;/h3&gt;&lt;p&gt;其餘三個室友都打英雄聯盟，其中兩個使用筆記本，一個是臺式機，沒有無線網卡，而且臺式機恰巧是打的最兇的那位。&lt;/p&gt;&#xA;&lt;h2 id=&#34;決定採用的方案&#34;&gt;決定採用的方案&#xA;&lt;/h2&gt;&lt;p&gt;首先，肯定不能徹底阻斷寢室網絡與英雄聯盟服務器的連接，這樣明顯感知太強，容易被發現，其次由於另外兩個室友都是筆記本電腦，發現丟包率太高肯定會開熱點換移動網絡，所以最終的方案確定為模仿GFW對網站隨機丟包的干擾模式。&lt;/p&gt;&#xA;&lt;h2 id=&#34;具體行動&#34;&gt;具體行動&#xA;&lt;/h2&gt;&lt;p&gt;首先先給每個室友分配靜態的IP地址，原因看到後面你就知道了。&lt;/p&gt;&#xA;&lt;p&gt;上網查找&lt;a class=&#34;link&#34; href=&#34;https://support-leagueoflegends.riotgames.com/hc/en-us/articles/4407290569747-Advanced-Connections-Troubleshooting-Guide&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;資料&lt;/a&gt;，可以知道英雄聯盟所使用的端口:&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;項目&lt;/th&gt;&#xA;          &lt;th&gt;端口號&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;League of Legends Game Client&lt;/td&gt;&#xA;          &lt;td&gt;5000 - 5500 UDP&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Patcher and Maestro&lt;/td&gt;&#xA;          &lt;td&gt;8393 - 8400 TCP&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;PVP.Net&lt;/td&gt;&#xA;          &lt;td&gt;2099 TCP&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;PVP.Net&lt;/td&gt;&#xA;          &lt;td&gt;5223 TCP&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;PVP.Net&lt;/td&gt;&#xA;          &lt;td&gt;5222 TCP&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;HTTP Connections&lt;/td&gt;&#xA;          &lt;td&gt;80 TCP&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;HTTPS Connections&lt;/td&gt;&#xA;          &lt;td&gt;443 TCP&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Spectator Mode&lt;/td&gt;&#xA;          &lt;td&gt;8088 UDP and TCP&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;向路由器的iptables裡添加以下隨機丟包的規則：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;# Block LOL&#xA;iptables -I FORWARD -p udp --dport 5000:5500 -m statistic --mode random --probability 0.3 -j DROP&#xA;iptables -I FORWARD -p tcp --dport 8393:8400 -m statistic --mode random --probability 0.3 -j DROP&#xA;iptables -I FORWARD -p tcp --dport 2099 -m statistic --mode random --probability 0.3 -j DROP&#xA;iptables -I FORWARD -p tcp --dport 5223 -m statistic --mode random --probability 0.3 -j DROP&#xA;iptables -I FORWARD -p tcp --dport 5222 -m statistic --mode random --probability 0.3 -j DROP&#xA;iptables -I FORWARD -p tcp --dport 5233 -m statistic --mode random --probability 0.3 -j DROP&#xA;iptables -I FORWARD -p tcp --dport 8088 -m statistic --mode random --probability 0.3 -j DROP&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;關於如何在 OpenWRT 上自定義 iptables 規則，有兩種方法，第一種方法，打開 系統 -&amp;gt; TTYD終端 將上面的命令一行一行復制進去回車，用這種方法，規則會在路由器重啟或者 iptables 重啟後失效，第二種方法，打開 網絡 -&amp;gt; 防火牆 找到 自定義規則 選項卡，將上述內容粘貼到這個頁面已有內容的後面，&lt;strong&gt;注意不要覆蓋文本框裡原先的內容&lt;/strong&gt;，完成後點擊頁面下方的 保存並應用，這樣即使是重啟路由器也不會重置 iptables 規則。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;這些 iptables 規則用到了 ipopt 模塊，而一些固件不會默認安裝 ipopt 模塊，如果發現 iptables 對這些規則報錯，請看後文的&lt;a class=&#34;link&#34; href=&#34;#%e8%a3%9c%e5%85%85%e5%ae%89%e8%a3%9d-ipopt-%e6%a8%a1%e5%a1%8a&#34; &gt;安裝 ipopt 部分&lt;/a&gt;。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;生效後，室友打英雄聯盟就會在校園網本就1%到5%丟包率的基礎上增加30%的丟包率。經過室友的盲測反饋（我怎麼可能會讓室友知情呢？！）放技能總是放不出去，打的非常不爽。&lt;/p&gt;&#xA;&lt;p&gt;但是這種方法似乎不適用於室友開加速器的情況，所以我們可以針對這種情況直接限制室友所有的流量，也就是說，不論室友的電腦發出什麼數據包，都能享受到30%的丟包率，除非室友開熱點，當然臺式機是不可能的，這種方法就可以讓所有的加速器都失效。前提是，室友的ip地址必須要提前確定，這也就是為什麼需要提前給室友的電腦分配靜態IP。&lt;/p&gt;&#xA;&lt;p&gt;向路由器的iptables裡添加以下規則&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;# Block specific roommate&#xA;iptables -I FORWARD -s 你室友的內網ip -m statistic --mode random --probability 0.3 -j DROP&#xA;# 以此類推&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;即可“照顧”室友所有的流量。&lt;/p&gt;&#xA;&lt;p&gt;很好，現在每天11點我都會準時更新防火牆規則，至少讓寢室安靜一點。&lt;/p&gt;&#xA;&lt;h2 id=&#34;授人以魚不如授人以漁&#34;&gt;授人以魚不如授人以漁&#xA;&lt;/h2&gt;&lt;p&gt;這些參數都是些什麼？&lt;/p&gt;&#xA;&lt;h3 id=&#34;iptables&#34;&gt;iptables&#xA;&lt;/h3&gt;&#xA;    &lt;blockquote&gt;&#xA;        &lt;p&gt;&lt;strong&gt;iptables&lt;/strong&gt;是運行在&lt;a class=&#34;link&#34; href=&#34;https://zh.wikipedia.org/wiki/%e4%bd%bf%e7%94%a8%e8%80%85%e7%a9%ba%e9%96%93&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;用戶空間&lt;/a&gt;的應用軟件，通過控制&lt;a class=&#34;link&#34; href=&#34;https://zh.wikipedia.org/wiki/Linux%e5%85%a7%e6%a0%b8&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Linux內核&lt;/a&gt;&lt;a class=&#34;link&#34; href=&#34;https://zh.wikipedia.org/wiki/Netfilter&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;netfilter&lt;/a&gt;模塊，來管理網絡數據包的處理和轉發。&lt;/p&gt;&#xA;&lt;p&gt;——維基百科&lt;/p&gt;&#xA;&#xA;    &lt;/blockquote&gt;&#xA;&lt;p&gt;簡單點說：iptables是Linux的防火牆軟件，可以通過設定的規則過濾掉特定的數據包達到防火牆的目的。OpenWRT基於Linux，自然也用iptables作為防火牆。&lt;/p&gt;&#xA;&lt;h3 id=&#34;-i-forward&#34;&gt;-I FORWARD&#xA;&lt;/h3&gt;&lt;p&gt;iptables有所謂的“五鏈”和“四表”。&lt;/p&gt;&#xA;&lt;p&gt;“五鏈”是指 netfilter 定義的 5 個規則鏈。每個規則表中包含多個數據鏈：INPUT（入站數據鏈）、OUTPUT（出站數據鏈）、FORWARD（轉發數據鏈）、PREROUTING（路由前數據鏈）和POSTROUTING（路由後數據鏈），防火牆規則存儲在這些數據鏈裡。&lt;/p&gt;&#xA;&lt;p&gt;“五鏈”的結構如下：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-mermaid&#34;&gt;graph LR&#xA;&#x9;A[PREROUTING] --&gt; B[路由決策]&#xA;&#x9;B --&gt; C[FORWARD]&#xA;&#x9;B --&gt; D[INPUT]&#xA;&#x9;D --&gt; E[Local Process]&#xA;&#x9;E &amp; C --&gt; F[POSTROUTING]&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;四表分別是：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;filter：過濾整個數據包，在 INPUT、FORWARD 和 OUTPUT 鏈可用&lt;/li&gt;&#xA;&lt;li&gt;nat：控制數據包的地址轉換，在 PREROUTING 、INPUT、OUTPUT 和 POSTROUTING 鏈可用&lt;/li&gt;&#xA;&lt;li&gt;mangle：修改過濾數據包中的原數據，在 PREROUTING、INPUT、OUTPUT、FORWARD 和 POSTROUTING 鏈可用&lt;/li&gt;&#xA;&lt;li&gt;raw：控制 nat 表連接追蹤機制的啟用與否，在 PREROUTING、OUTPUT 鏈可用&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;路由器的功能是轉發數據，這些數據顯然經過 FORWARD 鏈，故規則都在 FORWARD 鏈上添加。在 iptables 上使用 -I 參數插入規則時，默認會插入 filter 表，也就是我們需要的表。&lt;/p&gt;&#xA;&lt;h3 id=&#34;-p-xxx-dport-xxxx&#34;&gt;-p xxx &amp;ndash;dport xxxx&#xA;&lt;/h3&gt;&lt;p&gt;使用 iptables 時，-p 參數用於指定規則適用的協議，&amp;ndash;dport，即destination port的縮寫，支持範圍匹配，可以匹配數據包所去往的端口，這裡參照英雄聯盟所使用的端口和與之對應的協議一一阻止。&lt;/p&gt;&#xA;&lt;h3 id=&#34;-m-statistic-mode-random-probability-03&#34;&gt;-m statistic &amp;ndash;mode random &amp;ndash;probability 0.3&#xA;&lt;/h3&gt;&lt;p&gt;這些都是自定義的 丟包參數，可以實現很多其他的功能，因為iptables功能太多，故這裡不做贅述，感興趣的話可以自行查閱iptables相關的教程。&lt;/p&gt;&#xA;&lt;h3 id=&#34;-j-drop&#34;&gt;-j DROP&#xA;&lt;/h3&gt;&lt;p&gt;iptables 可以對符合規則條件的數據包做多種處理：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ACCEPT：允許數據包通過&lt;/li&gt;&#xA;&lt;li&gt;DROP：丟棄數據包&lt;/li&gt;&#xA;&lt;li&gt;REJECT：拒絕數據包通過&lt;/li&gt;&#xA;&lt;li&gt;LOG：記錄日誌&lt;/li&gt;&#xA;&lt;li&gt;DNAT：目標地址NAT&lt;/li&gt;&#xA;&lt;li&gt;SNAT：源地址NAT&lt;/li&gt;&#xA;&lt;li&gt;MASQUERADE：地址欺騙&lt;/li&gt;&#xA;&lt;li&gt;REDIRECT：重定向&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;需要隨機丟棄數據包，自然是選擇DROP。&lt;/p&gt;&#xA;&lt;h2 id=&#34;特定時間自動添加刪除丟包規則&#34;&gt;特定時間自動添加/刪除丟包規則&#xA;&lt;/h2&gt;&lt;p&gt;在路由器的 Crontab 裡添加如下規則&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;#Automatic Block&#xA;0 0 23 * * ? iptables -I FORWARD -p udp --dport 5000:5500 -m statistic --mode random --probability 0.3 -j DROP&#xA;0 0 23 * * ? iptables -I FORWARD -p tcp --dport 8393:8400 -m statistic --mode random --probability 0.3 -j DROP&#xA;0 0 23 * * ? iptables -I FORWARD -p tcp --dport 2099 -m statistic --mode random --probability 0.3 -j DROP&#xA;0 0 23 * * ? iptables -I FORWARD -p tcp --dport 5223 -m statistic --mode random --probability 0.3 -j DROP&#xA;0 0 23 * * ? iptables -I FORWARD -p tcp --dport 5222 -m statistic --mode random --probability 0.3 -j DROP&#xA;0 0 23 * * ? iptables -I FORWARD -p tcp --dport 5233 -m statistic --mode random --probability 0.3 -j DROP&#xA;0 0 23 * * ? iptables -I FORWARD -p tcp --dport 8088 -m statistic --mode random --probability 0.3 -j DROP&#xA;#Automatic unblock&#xA;0 0 7 * * ? iptables iptables -D FORWARD -p udp --dport 5000:5500 -m statistic --mode random --probability 0.3 -j DROP&#xA;0 0 7 * * ? iptables -D FORWARD -p tcp --dport 8393:8400 -m statistic --mode random --probability 0.3 -j DROP&#xA;0 0 7 * * ? iptables -D FORWARD -p tcp --dport 2099 -m statistic --mode random --probability 0.3 -j DROP&#xA;0 0 7 * * ? iptables -D FORWARD -p tcp --dport 5223 -m statistic --mode random --probability 0.3 -j DROP&#xA;0 0 7 * * ? iptables -D FORWARD -p tcp --dport 5222 -m statistic --mode random --probability 0.3 -j DROP&#xA;0 0 7 * * ? iptables -D FORWARD -p tcp --dport 5233 -m statistic --mode random --probability 0.3 -j DROP&#xA;0 0 7 * * ? iptables -D FORWARD -p tcp --dport 8088 -m statistic --mode random --probability 0.3 -j DROP&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;即可實現每天晚上11點自動添加丟包規則，每天早晨7點自動刪除丟包規則。&lt;/p&gt;&#xA;&lt;h2 id=&#34;補充安裝-ipopt-模塊&#34;&gt;補充：安裝 &lt;code&gt;ipopt&lt;/code&gt; 模塊&#xA;&lt;/h2&gt;&lt;p&gt;部分固件可能存在沒有&lt;code&gt;ipopt&lt;/code&gt;模塊的問題，而這些規則大部分都使用到了這個模塊，這種情況下需要手動安裝。&lt;/p&gt;&#xA;&lt;p&gt;ipopt 的安裝有兩個選擇，一般出於穩定性考慮會安裝用戶層的&lt;code&gt;iptables-mod-ipopt&lt;/code&gt;，而內核級的&lt;code&gt;kmod-ipt-ipopt&lt;/code&gt;則在設備 CPU 性能孱弱或存儲空間不夠用的情況下選擇。&lt;/p&gt;&#xA;&lt;p&gt;內核級的模塊一般需要預先編譯固件才能安裝，而用戶層只需執行以下&lt;code&gt;opkg&lt;/code&gt;命令即可：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-shell&#34;&gt;opkg install iptables-mod-ipopt&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;後期計劃&#34;&gt;後期計劃&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 後續可能會寫一個每天指定時間自動添加，自動刪除iptables規則的腳本，實現應該相對容易。最近要期末考試，備考要緊。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 其次可能會補充iptables的常用功能解說。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
        </item></channel>
</rss>
