<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>网络 on KePulsary</title><link>https://kepulsary.github.io/tags/%E7%BD%91%E7%BB%9C/</link><description>Recent content in 网络 on KePulsary</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Wed, 26 Aug 2026 03:00:00 +0000</lastBuildDate><atom:link href="https://kepulsary.github.io/tags/%E7%BD%91%E7%BB%9C/index.xml" rel="self" type="application/rss+xml"/><item><title>WireGuard 与 wg-easy 速查手册</title><link>https://kepulsary.github.io/2026/08/26/wg-easy-cheatsheet/</link><pubDate>Wed, 26 Aug 2026 03:00:00 +0000</pubDate><guid>https://kepulsary.github.io/2026/08/26/wg-easy-cheatsheet/</guid><description>&lt;h1 id="wireguard-与-wg-easy-速查手册"&gt;WireGuard 与 wg-easy 速查手册&#10;&lt;/h1&gt;&lt;h2 id="1-转发一个包到达主机后"&gt;1. 转发：一个包到达主机后&#10;&lt;/h2&gt;&lt;pre class="mermaid"&gt;&#10;flowchart TD&#10; A[&amp;#34;网卡收到 IP 包&amp;#34;] --&amp;gt; B{&amp;#34;目的 IP 是本机？&amp;#34;}&#10; B --&amp;gt;|&amp;#34;是&amp;#34;| C[&amp;#34;交给本机进程&amp;lt;br/&amp;gt;（ping / ssh / 浏览器）&amp;#34;]&#10; B --&amp;gt;|&amp;#34;否&amp;#34;| D{&amp;#34;ip_forward = 1？&amp;#34;}&#10; D --&amp;gt;|&amp;#34;否&amp;#34;| E[&amp;#34;丢弃（普通主机默认）&amp;#34;]&#10; D --&amp;gt;|&amp;#34;是&amp;#34;| F[&amp;#34;查系统路由表&amp;lt;br/&amp;gt;最长前缀匹配&amp;#34;]&#10; F --&amp;gt; G{&amp;#34;FORWARD 链放行？&amp;#34;}&#10; G --&amp;gt;|&amp;#34;否&amp;#34;| E&#10; G --&amp;gt;|&amp;#34;是&amp;#34;| H[&amp;#34;从匹配接口发出&amp;lt;br/&amp;gt;（eth0 / wg0）&amp;#34;]&#10;&lt;/pre&gt;&lt;ul&gt;&#10;&lt;li&gt;路由表 = 去哪、从哪出（&lt;code&gt;ip route&lt;/code&gt;）&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;ip_forward&lt;/code&gt; = 肯不肯帮别人转包&lt;/li&gt;&#10;&lt;li&gt;FORWARD 链 = 防火墙放不放转发的包&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="2-nat为什么出口端必须改写源-ip"&gt;2. NAT：为什么出口端必须改写源 IP&#10;&lt;/h2&gt;&lt;pre class="mermaid"&gt;&#10;sequenceDiagram&#10; participant S as 支援PC 10.8.0.3&#10; participant E as 出口机 192.168.80.132&#10; participant T as 比赛机器 192.168.80.10&#10; S-&amp;gt;&amp;gt;E: src=10.8.0.3 dst=192.168.80.10&#10; Note over E: POSTROUTING 链 SNAT：&amp;lt;br/&amp;gt;源改写为 192.168.80.132，&amp;lt;br/&amp;gt;conntrack 记录映射&#10; E-&amp;gt;&amp;gt;T: src=192.168.80.132&#10; T-&amp;gt;&amp;gt;E: 回包 dst=192.168.80.132&#10; Note over E: conntrack 查表：&amp;lt;br/&amp;gt;目的地改回 10.8.0.3&#10; E-&amp;gt;&amp;gt;S: dst=10.8.0.3（进 wg 隧道）&#10;&lt;/pre&gt;&lt;p&gt;不改写源 IP，比赛机器不认识 10.8.0.3，回包石沉大海（回程路由问题）。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;code&gt;SNAT --to-source IP&lt;/code&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;code&gt;MASQUERADE&lt;/code&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;源 IP&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;固定指定&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;出口网卡当前 IP（动态）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;适用&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;IP 恒定（桥接 VM / 静态内网 IP）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;IP 浮动（DHCP / 云主机 / WSL2）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h2 id="3-wireguardallowedips-一个字段两件事"&gt;3. WireGuard：AllowedIPs 一个字段两件事&#10;&lt;/h2&gt;&lt;pre class="mermaid"&gt;&#10;flowchart LR&#10; subgraph OUT [&amp;#34;出方向 = 选路&amp;#34;]&#10; A[&amp;#34;目的地命中某 peer 的 AllowedIPs&amp;#34;] --&amp;gt; B[&amp;#34;加密发给该 peer&amp;#34;]&#10; end&#10; subgraph IN [&amp;#34;入方向 = 门禁&amp;#34;]&#10; C[&amp;#34;从 peer 解密出的包&amp;#34;] --&amp;gt; D{&amp;#34;源 IP 在该 peer&amp;lt;br/&amp;gt;AllowedIPs 内？&amp;#34;}&#10; D --&amp;gt;|&amp;#34;是&amp;#34;| E[&amp;#34;放行&amp;#34;]&#10; D --&amp;gt;|&amp;#34;否&amp;#34;| F[&amp;#34;静默丢弃&amp;#34;]&#10; end&#10;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;客户端配置和服务端 wg0.conf 是两张独立的表&lt;/strong&gt;，各写各的：&lt;/p&gt;&#10;&lt;pre class="mermaid"&gt;&#10;flowchart LR&#10; subgraph PC [&amp;#34;支援PC 下载的客户端配置&amp;#34;]&#10; A1[&amp;#34;[Peer] 服务器&amp;lt;br/&amp;gt;AllowedIPs =&amp;lt;br/&amp;gt;10.8.0.0/24, 192.168.80.0/24&amp;#34;]&#10; end&#10; subgraph VPSS [&amp;#34;VPS 的 wg0.conf&amp;#34;]&#10; B1[&amp;#34;peer(支援PC)&amp;lt;br/&amp;gt;AllowedIPs = 10.8.0.3/32&amp;#34;]&#10; B2[&amp;#34;peer(出口机)&amp;lt;br/&amp;gt;AllowedIPs = 10.8.0.2/32,&amp;lt;br/&amp;gt;192.168.80.0/24（挂载网段）&amp;#34;]&#10; end&#10; subgraph EPC [&amp;#34;出口机下载的客户端配置&amp;#34;]&#10; C1[&amp;#34;[Peer] 服务器&amp;lt;br/&amp;gt;AllowedIPs = 10.8.0.0/24&amp;#34;]&#10; end&#10; A1 -.加密.-&amp;gt; VPSS&#10; C1 -.加密.-&amp;gt; VPSS&#10;&lt;/pre&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;系统路由表先于密钥路由&lt;/strong&gt;：内核先决定包走 wg0，WireGuard 才按 peer AllowedIPs 选加密对象&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;Table = auto&lt;/code&gt;：wg-quick &lt;strong&gt;up 时&lt;/strong&gt;才为 peer 的 AllowedIPs 写系统路由；&lt;code&gt;syncconf&lt;/code&gt; 只改 peer 表不写路由 → &lt;strong&gt;改完挂载网段必须重启接口&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;PersistentKeepalive = 25&lt;/code&gt;：给中间每层 NAT 的 UDP 映射续费&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="4-两种出口模型"&gt;4. 两种出口模型&#10;&lt;/h2&gt;&lt;pre class="mermaid"&gt;&#10;flowchart LR&#10; A[&amp;#34;本地PC-A&amp;#34;] --&amp;gt;|&amp;#34;0.0.0.0/0 全隧道&amp;#34;| V[&amp;#34;VPS 原版 wg-easy&amp;lt;br/&amp;gt;MASQUERADE -o eth0&amp;#34;]&#10; B[&amp;#34;本地PC-B&amp;#34;] --&amp;gt;|&amp;#34;0.0.0.0/0&amp;#34;| V&#10; V --&amp;gt; I[&amp;#34;互联网&amp;lt;br/&amp;gt;所有人的出口 IP = VPS&amp;#34;]&#10;&lt;/pre&gt;&lt;pre class="mermaid"&gt;&#10;flowchart LR&#10; A[&amp;#34;支援PC&amp;lt;br/&amp;gt;10.8.0.3&amp;#34;] --&amp;gt;|&amp;#34;隧道 UDP 51820&amp;#34;| V[&amp;#34;VPS&amp;lt;br/&amp;gt;纯转发，不 NAT&amp;#34;]&#10; V --&amp;gt;|&amp;#34;目的 ∈ 192.168.80.0/24&amp;lt;br/&amp;gt;按 peer AllowedIPs&amp;#34;| E[&amp;#34;出口机&amp;lt;br/&amp;gt;wg:10.8.0.2&amp;lt;br/&amp;gt;内网:192.168.80.132&amp;#34;]&#10; E --&amp;gt;|&amp;#34;SNAT 源 → .132&amp;#34;| N[&amp;#34;比赛内网&amp;lt;br/&amp;gt;192.168.80.0/24&amp;#34;]&#10;&lt;/pre&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;原版 wg-easy&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;my-wg-easy（魔改旧版）&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;新版 wg-easy&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;出口&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;VPS（MASQUERADE）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;指定出口机（SNAT）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;任意，按客户端配&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;挂载网段&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;无&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;WG_ALLOWED_IPS&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;每客户端 Server Allowed IPs&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;出口端 NAT&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;服务端固定&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;硬编码进出口机配置&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;每客户端 Post Up 钩子&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;指定出口机&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;无&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;按客户端名 &lt;code&gt;WG_LOCAL_NAME&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;显式逐客户端配置&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;配置生效&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;重启容器&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;重启容器&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Restart Interface&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h2 id="5-场景全景ping-1921688010-的一生"&gt;5. 场景全景：ping 192.168.80.10 的一生&#10;&lt;/h2&gt;&lt;pre class="mermaid"&gt;&#10;flowchart TD&#10; S[&amp;#34;① 支援PC：路由表 192.168.80.0/24 → wg0，加密&amp;#34;] --&amp;gt; V[&amp;#34;② VPS：解密，非本机，转发&amp;lt;br/&amp;gt;需 ip_forward + FORWARD 放行&amp;lt;br/&amp;gt;需系统路由 192.168.80.0/24 → wg0&amp;lt;br/&amp;gt;密钥路由命中出口机 peer，加密&amp;#34;]&#10; V --&amp;gt; E[&amp;#34;③ 出口机：解密，非本机，转发&amp;lt;br/&amp;gt;SNAT 源 10.8.0.3 → 192.168.80.132&amp;#34;]&#10; E --&amp;gt; T[&amp;#34;④ 比赛机器：只看到 .132 在访问&amp;#34;]&#10; T --&amp;gt;|&amp;#34;⑤ 回包 dst=.132&amp;#34;| E2[&amp;#34;⑥ 出口机：conntrack 改回 dst=10.8.0.3&amp;lt;br/&amp;gt;路由 10.8.0.0/24 → wg0，加密&amp;#34;]&#10; E2 --&amp;gt; V2[&amp;#34;⑦ VPS：解密，dst=10.8.0.3&amp;lt;br/&amp;gt;/32 最长前缀命中支援PC peer，加密&amp;#34;]&#10; V2 --&amp;gt; S2[&amp;#34;⑧ 支援PC：解密，源=192.168.80.10&amp;lt;br/&amp;gt;在自己 AllowedIPs 内 → 放行 ✓&amp;#34;]&#10;&lt;/pre&gt;&lt;h2 id="6-新版-wg-easy-比赛内网配置推荐"&gt;6. 新版 wg-easy 比赛内网配置（推荐）&#10;&lt;/h2&gt;&lt;pre class="mermaid"&gt;&#10;flowchart TD&#10; A[&amp;#34;VPS 部署新版 wg-easy，默认配置&amp;#34;] --&amp;gt; B[&amp;#34;创建客户端：出口机&amp;lt;br/&amp;gt;按下表配字段&amp;#34;]&#10; B --&amp;gt; C[&amp;#34;赛场 Linux 机：&amp;lt;br/&amp;gt;sysctl -w net.ipv4.ip_forward=1&amp;lt;br/&amp;gt;wg-quick up 下载的 conf&amp;#34;]&#10; C --&amp;gt; D[&amp;#34;管理后台 Restart Interface&amp;lt;br/&amp;gt;（生成 比赛网段 → wg0 系统路由）&amp;#34;]&#10; D --&amp;gt; E[&amp;#34;创建客户端：支援&amp;lt;br/&amp;gt;Allowed IPs 加比赛网段&amp;#34;]&#10; E --&amp;gt; F[&amp;#34;分发配置 / 二维码&amp;#34;]&#10;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;出口机客户端字段：&lt;/strong&gt;&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;字段&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;值&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Allowed IPs&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;10.8.0.0/24&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Server Allowed IPs&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;192.168.80.0/24&lt;/code&gt;（比赛网段，可多个）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Post Up&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 192.168.80.132&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Post Down&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;同上改 &lt;code&gt;-D&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Persistent Keepalive&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;25&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;&lt;strong&gt;支援客户端字段：&lt;/strong&gt;&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;字段&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;值&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Allowed IPs&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;10.8.0.0/24, 192.168.80.0/24&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;&lt;strong&gt;坑：&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;改 Server Allowed IPs 后必须 Restart Interface（syncconf 不写系统路由）&lt;/li&gt;&#10;&lt;li&gt;出口机须 Linux 且 wg-quick 启动（Windows 原生客户端不执行 PostUp）；VM 桥接最佳；WSL2 / Docker 场景 PostUp 改用 &lt;code&gt;-j MASQUERADE&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;比赛网段勿与 WG 虚拟网段重叠&lt;/li&gt;&#10;&lt;li&gt;新客户端默认继承全局 Allowed IPs（&lt;code&gt;0.0.0.0/0&lt;/code&gt;），不改则支援全部流量走 VPS&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="7-my-wg-easy旧版比赛内网配置"&gt;7. my-wg-easy（旧版）比赛内网配置&#10;&lt;/h2&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;环境变量&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;示例&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;含义&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;WG_LOCAL_NAME&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;l1aotest&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;出口机的客户端名&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;WG_LOCAL_PASS&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;192.168.80.132&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;出口机内网 IP（SNAT 目标）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;WG_ALLOWED_IPS&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;192.168.80.0/24&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;挂载网段（同时喂客户端路由 + 服务端 peer）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;WG_DEFAULT_ADDRESS&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;10.8.0.x&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;WG 虚拟网段&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;WG_PERSISTENT_KEEPALIVE&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;25&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;NAT 保活&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;流程：先创建名为 &lt;code&gt;WG_LOCAL_NAME&lt;/code&gt; 的客户端 → &lt;strong&gt;重启容器&lt;/strong&gt;（wg-quick up 才写挂载网段路由）→ 出口机用下载的 conf &lt;code&gt;wg-quick up&lt;/code&gt; + 开 &lt;code&gt;ip_forward&lt;/code&gt;。&lt;/p&gt;&#10;&lt;h2 id="8-排障按序检查"&gt;8. 排障：按序检查&#10;&lt;/h2&gt;&lt;pre class="mermaid"&gt;&#10;flowchart TD&#10; A[&amp;#34;ping 不通&amp;#34;] --&amp;gt; B[&amp;#34;支援PC：ip route get 目标&amp;lt;br/&amp;gt;走了 wg0？&amp;#34;]&#10; B --&amp;gt;|&amp;#34;否&amp;#34;| B1[&amp;#34;AllowedIPs 缺比赛网段&amp;#34;]&#10; B --&amp;gt;|&amp;#34;是&amp;#34;| C[&amp;#34;VPS：ip route get 目标&amp;lt;br/&amp;gt;走了 wg0？&amp;#34;]&#10; C --&amp;gt;|&amp;#34;否&amp;#34;| C1[&amp;#34;改过挂载网段没重启接口&amp;lt;br/&amp;gt;→ Restart Interface&amp;#34;]&#10; C --&amp;gt;|&amp;#34;是&amp;#34;| D[&amp;#34;出口机：tcpdump -ni eth0&amp;lt;br/&amp;gt;有出向包？&amp;#34;]&#10; D --&amp;gt;|&amp;#34;否&amp;#34;| D1[&amp;#34;ip_forward 未开 / FORWARD 未放行&amp;#34;]&#10; D --&amp;gt;|&amp;#34;是&amp;#34;| E[&amp;#34;回包到出口机却没回支援？&amp;lt;br/&amp;gt;支援 AllowedIPs 缺比赛网段&amp;lt;br/&amp;gt;（被自己 WG 门禁丢弃）&amp;#34;]&#10;&lt;/pre&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;span class="lnt"&gt;3&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ip route get 192.168.80.10 &lt;span class="c1"&gt;# 本机视角：包从哪个口出&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tcpdump -ni wg0 &lt;span class="c1"&gt;# 隧道侧抓包&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tcpdump -ni eth0 &lt;span class="c1"&gt;# 物理侧抓包&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>软路由折腾记录</title><link>https://kepulsary.github.io/2023/05/30/soft-router/</link><pubDate>Tue, 30 May 2023 00:00:00 +0000</pubDate><guid>https://kepulsary.github.io/2023/05/30/soft-router/</guid><description>&lt;h1 id="软路由折腾记录"&gt;软路由折腾记录&#10;&lt;/h1&gt;&lt;p&gt;前言：最近在YouTube上刷到挺多科学上网的东西，之前也直接整过代理，就想着买个软路由来捣鼓捣鼓，当然还有很多玩法待开发。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="img" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="1827" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kepulsary.github.io/2023/05/30/soft-router/accessories.jpg" srcset="https://kepulsary.github.io/2023/05/30/soft-router/accessories_hu_65f5b4b9dd54b9e4.jpg 800w, https://kepulsary.github.io/2023/05/30/soft-router/accessories_hu_5a596a9436f675c6.jpg 1600w, https://kepulsary.github.io/2023/05/30/soft-router/accessories_hu_50cbbf16194c3156.jpg 2400w, https://kepulsary.github.io/2023/05/30/soft-router/accessories.jpg 2436w" width="2436"&gt;&lt;/p&gt;&#10;&lt;h2 id="选购"&gt;选购&#10;&lt;/h2&gt;&lt;p&gt;结合YouTube上的推荐视频和自身的需求，我买了电犀牛的R66S，入门还是比较友好的，三百出头&lt;/p&gt;&#10;&lt;p&gt;全部的配件：路由器本身，充电器，tf卡32g，读卡器&lt;/p&gt;&#10;&lt;h2 id="刷固件"&gt;刷固件&#10;&lt;/h2&gt;&lt;p&gt;买回来已经自带了固件，但是ssr等等代理软件不自带&lt;/p&gt;&#10;&lt;p&gt;电犀牛官网：&lt;a class="link" href="https://r68s.cn/" target="_blank" rel="noopener"&#10; &gt;https://r68s.cn/&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;我刷了个istoreos固件，官网：&lt;a class="link" href="https://www.istoreos.com/" target="_blank" rel="noopener"&#10; &gt;https://www.istoreos.com/&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;刷机流程也比较简单，参考教程：&lt;a class="link" href="https://doc.linkease.com/zh/guide/istoreos/install_r66s.html" target="_blank" rel="noopener"&#10; &gt;https://doc.linkease.com/zh/guide/istoreos/install_r66s.html&lt;/a&gt;&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;把原本的tf卡取下，插到读卡器接入电脑，插入电脑会让格式化u盘，我瞎点了，进去我的电脑发现出现两个盘，而且是几百兆这种，到计算机管理的磁盘管理下删去分区，再新建一整个分区。。&lt;/li&gt;&#10;&lt;li&gt;创建启动盘，我使用的是Rufus，官网地址是：&lt;a class="link" href="https://rufus.ie/zh/%EF%BC%8C%E9%80%89%E6%8B%A9tf%E5%8D%A1%EF%BC%8C%E9%80%89%E6%8B%A9%E5%9B%BA%E4%BB%B6%EF%BC%8C%E7%82%B9%E5%BC%80%E5%A7%8B%E5%8D%B3%E5%8F%AF" target="_blank" rel="noopener"&#10; &gt;https://rufus.ie/zh/，选择tf卡，选择固件，点开始即可&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;启动盘创建好后，将tf插回R66S即可，开机进入web界面默认：&lt;a class="link" href="http://192.168.100.1/" target="_blank" rel="noopener"&#10; &gt;http://192.168.100.1/&lt;/a&gt; 账号/密码：root/password，ssh密码一样&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;到此固件就成功刷入了，感觉用tf卡对小白挺友好的，也可以通过web端刷入&lt;/p&gt;&#10;&lt;h2 id="拓展功能"&gt;拓展功能&#10;&lt;/h2&gt;&lt;p&gt;istoreos也没有自带ssr这种插件，iStore中也没有&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="img-01" class="gallery-image" data-flex-basis="391px" data-flex-grow="163" height="625" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kepulsary.github.io/2023/05/30/soft-router/img-01.png" srcset="https://kepulsary.github.io/2023/05/30/soft-router/img-01_hu_32b855ae64cdf38b.png 800w, https://kepulsary.github.io/2023/05/30/soft-router/img-01.png 1019w" width="1019"&gt;&lt;/p&gt;&#10;&lt;p&gt;到这个项目中下载插件手动安装：&lt;a class="link" href="https://github.com/AUK9527/Are-u-ok" target="_blank" rel="noopener"&#10; &gt;https://github.com/AUK9527/Are-u-ok&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;R66S的是 aarch64_cortex-a53平台，并不是x86&lt;/p&gt;&#10;&lt;p&gt;然后就可以把ssrplus装上了&lt;/p&gt;&#10;&lt;p&gt;在实验室中更新机场订阅一直不成功，解决方案：手动添加一个节点，挂上节点后更新&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="img-02" class="gallery-image" data-flex-basis="562px" data-flex-grow="234" height="113" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kepulsary.github.io/2023/05/30/soft-router/img-02.png" width="265"&gt;&lt;/p&gt;&#10;&lt;p&gt;其他拓展：istorex（一个网页主题），AdGuard Home（广告拦截器）&lt;/p&gt;&#10;&lt;h2 id="校园网认证"&gt;校园网认证&#10;&lt;/h2&gt;&lt;p&gt;宿舍的网络需要进行认证&lt;/p&gt;&#10;&lt;p&gt;经过测试发现，在没有验证时访问一个页面比如：&lt;a class="link" href="http://www.baidu.com/" target="_blank" rel="noopener"&#10; &gt;http://www.baidu.com/&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;返回，其中host_fzu为校园网ip，下面亦然&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;top&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;http://host_fzu/eportal/index.jsp?get传入一些值包含设备mac值等等&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;而校园网认证的login只需要账号密码和设备的信息，可以在上面未认证的html中获取&lt;/p&gt;&#10;&lt;p&gt;只需要两个http即可实现校园网认证&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 2&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 3&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 4&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 5&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 6&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 7&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 8&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 9&#10;&lt;/span&gt;&lt;span class="lnt"&gt;10&#10;&lt;/span&gt;&lt;span class="lnt"&gt;11&#10;&lt;/span&gt;&lt;span class="lnt"&gt;12&#10;&lt;/span&gt;&lt;span class="lnt"&gt;13&#10;&lt;/span&gt;&lt;span class="lnt"&gt;14&#10;&lt;/span&gt;&lt;span class="lnt"&gt;15&#10;&lt;/span&gt;&lt;span class="lnt"&gt;16&#10;&lt;/span&gt;&lt;span class="lnt"&gt;17&#10;&lt;/span&gt;&lt;span class="lnt"&gt;18&#10;&lt;/span&gt;&lt;span class="lnt"&gt;19&#10;&lt;/span&gt;&lt;span class="lnt"&gt;20&#10;&lt;/span&gt;&lt;span class="lnt"&gt;21&#10;&lt;/span&gt;&lt;span class="lnt"&gt;22&#10;&lt;/span&gt;&lt;span class="lnt"&gt;23&#10;&lt;/span&gt;&lt;span class="lnt"&gt;24&#10;&lt;/span&gt;&lt;span class="lnt"&gt;25&#10;&lt;/span&gt;&lt;span class="lnt"&gt;26&#10;&lt;/span&gt;&lt;span class="lnt"&gt;27&#10;&lt;/span&gt;&lt;span class="lnt"&gt;28&#10;&lt;/span&gt;&lt;span class="lnt"&gt;29&#10;&lt;/span&gt;&lt;span class="lnt"&gt;30&#10;&lt;/span&gt;&lt;span class="lnt"&gt;31&#10;&lt;/span&gt;&lt;span class="lnt"&gt;32&#10;&lt;/span&gt;&lt;span class="lnt"&gt;33&#10;&lt;/span&gt;&lt;span class="lnt"&gt;34&#10;&lt;/span&gt;&lt;span class="lnt"&gt;35&#10;&lt;/span&gt;&lt;span class="lnt"&gt;36&#10;&lt;/span&gt;&lt;span class="lnt"&gt;37&#10;&lt;/span&gt;&lt;span class="lnt"&gt;38&#10;&lt;/span&gt;&lt;span class="lnt"&gt;39&#10;&lt;/span&gt;&lt;span class="lnt"&gt;40&#10;&lt;/span&gt;&lt;span class="lnt"&gt;41&#10;&lt;/span&gt;&lt;span class="lnt"&gt;42&#10;&lt;/span&gt;&lt;span class="lnt"&gt;43&#10;&lt;/span&gt;&lt;span class="lnt"&gt;44&#10;&lt;/span&gt;&lt;span class="lnt"&gt;45&#10;&lt;/span&gt;&lt;span class="lnt"&gt;46&#10;&lt;/span&gt;&lt;span class="lnt"&gt;47&#10;&lt;/span&gt;&lt;span class="lnt"&gt;48&#10;&lt;/span&gt;&lt;span class="lnt"&gt;49&#10;&lt;/span&gt;&lt;span class="lnt"&gt;50&#10;&lt;/span&gt;&lt;span class="lnt"&gt;51&#10;&lt;/span&gt;&lt;span class="lnt"&gt;52&#10;&lt;/span&gt;&lt;span class="lnt"&gt;53&#10;&lt;/span&gt;&lt;span class="lnt"&gt;54&#10;&lt;/span&gt;&lt;span class="lnt"&gt;55&#10;&lt;/span&gt;&lt;span class="lnt"&gt;56&#10;&lt;/span&gt;&lt;span class="lnt"&gt;57&#10;&lt;/span&gt;&lt;span class="lnt"&gt;58&#10;&lt;/span&gt;&lt;span class="lnt"&gt;59&#10;&lt;/span&gt;&lt;span class="lnt"&gt;60&#10;&lt;/span&gt;&lt;span class="lnt"&gt;61&#10;&lt;/span&gt;&lt;span class="lnt"&gt;62&#10;&lt;/span&gt;&lt;span class="lnt"&gt;63&#10;&lt;/span&gt;&lt;span class="lnt"&gt;64&#10;&lt;/span&gt;&lt;span class="lnt"&gt;65&#10;&lt;/span&gt;&lt;span class="lnt"&gt;66&#10;&lt;/span&gt;&lt;span class="lnt"&gt;67&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;requests&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;bs4&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;BeautifulSoup&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;urllib.parse&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;quote&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;tqdm&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;tqdm&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;colorama&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;init&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Fore&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;current_time&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;formatted_time&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;current_time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;%Y-%m-&lt;/span&gt;&lt;span class="si"&gt;%d&lt;/span&gt;&lt;span class="s2"&gt; %H:%M:%S&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;current time: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;formatted_time&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;log:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34; :&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;host_fzu&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;userId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;password&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# proxies = {&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# &amp;#34;http&amp;#34;: &amp;#34;http://127.0.0.1:8080/&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# }&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;init&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;# init colorama&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_authenticated_url&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;test_con_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;http://36.152.44.96/&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;test_con_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;connected&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;host_fzu&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;connected&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Fore&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GREEN&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;connected.....&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Fore&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RESET&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="se"&gt;\r&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;flush&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;soup&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;BeautifulSoup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;html.parser&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;script_tag&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;soup&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;script&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;authentication_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;script_tag&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#39;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;host_fzu&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;authentication_url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Fore&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GREEN&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;connected.....&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Fore&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RESET&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="se"&gt;\r&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;flush&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Fore&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RED&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;not connected.....&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Fore&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RESET&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="se"&gt;\r&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;flush&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;connected&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;authentication_url&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;post_authenticated_packet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;queryString&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;authenticated_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;userId&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;quote&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;password&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;quote&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;service&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;queryString&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;quote&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;queryString&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;operatorPwd&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;operatorUserId&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;validcode&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;passwordEncrypt&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;false&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;authenticated_url_login&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;http://&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;host_fzu&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/eportal/InterFace.do?method=login&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;authenticated_url_login&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;authenticated_data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;json_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;json_data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;result&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;success&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Fore&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GREEN&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;Authentication succeeded.....&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Fore&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RESET&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="se"&gt;\r&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;flush&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Fore&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RED&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;Authentication failed.....&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Fore&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RESET&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="se"&gt;\r&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;flush&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vm"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;__main__&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;connected&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;queryString&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;get_authenticated_url&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;connected&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;queryString&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;post_authenticated_packet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;queryString&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="ne"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Fore&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RED&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;An error occurred: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="si"&gt;}{&lt;/span&gt;&lt;span class="n"&gt;Fore&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RESET&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="se"&gt;\r&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;flush&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;填入信息，执行脚本即可进行校园网认证&lt;/p&gt;&#10;&lt;p&gt;在软路由上写入计划任务&lt;/p&gt;&#10;&lt;p&gt;在此之前需要安装python3，pip和所需要的包&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;span class="lnt"&gt;3&#10;&lt;/span&gt;&lt;span class="lnt"&gt;4&#10;&lt;/span&gt;&lt;span class="lnt"&gt;5&#10;&lt;/span&gt;&lt;span class="lnt"&gt;6&#10;&lt;/span&gt;&lt;span class="lnt"&gt;7&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;opkg update&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;opkg install python3&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;opkg install python3-pip&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip3 install requests&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip3 install beautifulsoup4&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip3 install tqdm&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip3 install colorama&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;写入计划任务，可以在web端设置，道理一样&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;* * * * * /usr/bin/python3 /root/school/school.py &amp;gt;&amp;gt; /var/log/school.log&#10;0 18 * * * echo &amp;#39;&amp;#39; &amp;gt; /var/log/school.log&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这个计划任务的意思就是，每一分钟执行一次，然后将结果输出到日志中，每天18点清空日志&lt;/p&gt;&#10;&lt;p&gt;这个脚本的意思就是，检测是否能够正常访问36.152.44.96（百度），不能的话就提交表单认证&lt;/p&gt;&#10;&lt;h2 id="校园网绕过设备检测尝试"&gt;校园网绕过设备检测尝试&#10;&lt;/h2&gt;&lt;p&gt;参考：&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://xavier.wang/45-suck-shit-lan/" target="_blank" rel="noopener"&#10; &gt;https://xavier.wang/45-suck-shit-lan/&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.jja8.cn/article/%E6%A0%A1%E5%9B%AD%E7%BD%91%E5%A4%9A%E8%AE%BE%E5%A4%87%E4%BD%BF%E7%94%A8%E5%90%8C%E4%B8%80%E4%B8%AA%E8%B4%A6%E5%8F%B7%E9%98%B2%E6%A3%80%E6%B5%8B/" target="_blank" rel="noopener"&#10; &gt;https://www.jja8.cn/article/%E6%A0%A1%E5%9B%AD%E7%BD%91%E5%A4%9A%E8%AE%BE%E5%A4%87%E4%BD%BF%E7%94%A8%E5%90%8C%E4%B8%80%E4%B8%AA%E8%B4%A6%E5%8F%B7%E9%98%B2%E6%A3%80%E6%B5%8B/&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;成功修改ttl，和软路由隔着一个路由器，所以本地ping出去的ttl要减去两条&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;iptables -t mangle -A PREROUTING -i eth0 -j TTL --ttl-set &lt;span class="m"&gt;64&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;iptables -t mangle -A PREROUTING -i br-lan -j TTL --ttl-set &lt;span class="m"&gt;64&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;修改ntp，不知道怎么验证。。。&lt;/p&gt;&#10;&lt;p&gt;修改ua：Privoxy，修改成功80端口的http流量的ua成功修改，但是添加443端口ua修改失败，应该没证书的原因？SSL…&lt;/p&gt;&#10;&lt;p&gt;时不时黑名单十分钟，说明上面不怎么管用呃呃呃&lt;/p&gt;&#10;&lt;h2 id="bug"&gt;bug&#10;&lt;/h2&gt;&lt;p&gt;连上第一天，qq的群头像加载不出来，没怎么在意&lt;/p&gt;&#10;&lt;p&gt;第二天起床，看看微信公众号推文，公众号推文的图片也加载不出来，起床排查&lt;/p&gt;&#10;&lt;p&gt;以为是昨晚捣鼓绕过校园网导致的，把配置一步一步改回去，没有效果，重置路由器，可以成功加载图片，但是在我装几个插件后又不能使用，再重置，不能加载图片，查看图片的地址，手动ping，ping不通，到R66S上面ping，ping不通，但是可以通百度等等。。。云主机ping，可以ping通，于是确实是DNS的问题，更换dns服务器为阿里公共DNS：223.5.5.5和223.6.6.6，解决问题&lt;/p&gt;&#10;&lt;p&gt;脚本bug，修改dns后，在未认证下，找不到百度的host，于是乎我把脚本中的域名换为ip&lt;/p&gt;&#10;</description></item><item><title>WireGuard 使用记录</title><link>https://kepulsary.github.io/2023/03/13/wireguard/</link><pubDate>Mon, 13 Mar 2023 21:29:44 +0000</pubDate><guid>https://kepulsary.github.io/2023/03/13/wireguard/</guid><description>&lt;h1 id="wireguard-使用记录"&gt;WireGuard 使用记录&#10;&lt;/h1&gt;&lt;p&gt;之前打强网杯线下赛，只穿了个socks代理以至于二进制的同学不能接入网络。于是便使用 iptables + wg-easy 来实现一个内网穿透&lt;/p&gt;&#10;&lt;p&gt;OK，开始正题。现在需要支持在外面远程访问内网，可以实现类似内网访问的操作以支持二进制解题的网络需求&lt;/p&gt;&#10;&lt;h2 id="wireguard"&gt;WireGuard&#10;&lt;/h2&gt;&lt;p&gt;WireGuard是一种快速、现代的虚拟私人网络（VPN）协议。相对于其他VPN协议，WireGuard更加轻量级且易于配置和管理。它可以在多种操作系统上运行，包括Linux、Windows、macOS、iOS和Android。&lt;/p&gt;&#10;&lt;p&gt;WireGuard协议采用了最新的加密技术，比如Curve25519椭圆曲线加密和ChaCha20加密算法。它的数据包头部非常小，只有80字节，这使得它在传输数据时的开销非常小，因此它在延迟和吞吐量上的表现非常出色。与其他VPN协议相比，WireGuard的连接速度更快、更可靠、更稳定，并且在重连时也能够自动恢复连接。&lt;/p&gt;&#10;&lt;p&gt;总的来说，WireGuard是一种安全、高效、简单易用的VPN协议，因此它在当前的VPN市场上越来越受到青睐。&lt;/p&gt;&#10;&lt;p&gt;以下是WireGuard的性能对比&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="img-01" class="gallery-image" data-flex-basis="302px" data-flex-grow="125" height="680" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kepulsary.github.io/2023/03/13/wireguard/img-01.png" srcset="https://kepulsary.github.io/2023/03/13/wireguard/img-01_hu_572ed67fb5e3fb61.png 800w, https://kepulsary.github.io/2023/03/13/wireguard/img-01.png 856w" width="856"&gt;&lt;/p&gt;&#10;&lt;p&gt;wg-easy 可以让我们在任何 Linux 主机上更加方便地安装和管理 WireGuard，项目地址：&lt;a class="link" href="https://github.com/WeeJeWel/wg-easy" target="_blank" rel="noopener"&#10; &gt;https://github.com/WeeJeWel/wg-easy&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;优点：快速部署，配置文件的快速下发，方便管理，docker部署对云服务器不会产生影响&lt;/p&gt;&#10;&lt;h2 id="网络拓扑图"&gt;网络拓扑图&#10;&lt;/h2&gt;&lt;p&gt;话不多说，开始安装吧。网络拓扑大致如下。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="topology" class="gallery-image" data-flex-basis="338px" data-flex-grow="141" height="663" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kepulsary.github.io/2023/03/13/wireguard/topology.png" srcset="https://kepulsary.github.io/2023/03/13/wireguard/topology_hu_cbf085eba1e9e917.png 800w, https://kepulsary.github.io/2023/03/13/wireguard/topology.png 935w" width="935"&gt;&lt;/p&gt;&#10;&lt;p&gt;其中：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;1.1.1.1&lt;/code&gt; 为服务器的公网 IP&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;192.168.80.0/24&lt;/code&gt; 为内网的 IP 段&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;10.0.0.0/24&lt;/code&gt; 为 WireGuard 的 VPN 内网网段&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;100.100.1.0/24&lt;/code&gt; 为内网其他网段的 IP 段&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;最终实现的效果是，互联网上的其他主机通过连接 &lt;code&gt;1.1.1.1&lt;/code&gt; 上的 VPN 服务，接入内网机子网段。&lt;/p&gt;&#10;&lt;p&gt;即：个人PC可以访问到100.100.1.2，192.168.80.130等等&lt;/p&gt;&#10;&lt;h2 id="安装-wireguard"&gt;安装 WireGuard&#10;&lt;/h2&gt;&lt;p&gt;需要在 个人PC 和 内网机子（此处IP为 10.0.0.2） 上安装，其他不需要安装WireGuard&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://www.wireguard.com/install/" target="_blank" rel="noopener"&#10; &gt;https://www.wireguard.com/install/&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;WireGuard 不区分服务端与客户端，安装也比较简单，不出意外的话可以一行命令直接安装。&lt;/p&gt;&#10;&lt;h2 id="部署-wg-easy"&gt;部署 wg-easy&#10;&lt;/h2&gt;&lt;p&gt;原本的wg-easy的流量出口为云服务器，我对其进行了一定的魔改使得流量出口（指定IP段的流量）为内网机子&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/L1aovo/my-wg-easy.git&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;修改 docker-compose.dev.yml 补全 environment 部分&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 2&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 3&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 4&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 5&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 6&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 7&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 8&#10;&lt;/span&gt;&lt;span class="lnt"&gt; 9&#10;&lt;/span&gt;&lt;span class="lnt"&gt;10&#10;&lt;/span&gt;&lt;span class="lnt"&gt;11&#10;&lt;/span&gt;&lt;span class="lnt"&gt;12&#10;&lt;/span&gt;&lt;span class="lnt"&gt;13&#10;&lt;/span&gt;&lt;span class="lnt"&gt;14&#10;&lt;/span&gt;&lt;span class="lnt"&gt;15&#10;&lt;/span&gt;&lt;span class="lnt"&gt;16&#10;&lt;/span&gt;&lt;span class="lnt"&gt;17&#10;&lt;/span&gt;&lt;span class="lnt"&gt;18&#10;&lt;/span&gt;&lt;span class="lnt"&gt;19&#10;&lt;/span&gt;&lt;span class="lnt"&gt;20&#10;&lt;/span&gt;&lt;span class="lnt"&gt;21&#10;&lt;/span&gt;&lt;span class="lnt"&gt;22&#10;&lt;/span&gt;&lt;span class="lnt"&gt;23&#10;&lt;/span&gt;&lt;span class="lnt"&gt;24&#10;&lt;/span&gt;&lt;span class="lnt"&gt;25&#10;&lt;/span&gt;&lt;span class="lnt"&gt;26&#10;&lt;/span&gt;&lt;span class="lnt"&gt;27&#10;&lt;/span&gt;&lt;span class="lnt"&gt;28&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yml" data-lang="yml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;3.8&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;services&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;wg-easy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;weejewel/wg-easy&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;sh -c &amp;#34;cd /;npm install basic-auth;cd /app;npm run serve&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;volumes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;./src/:/app/&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;./conf:/etc/wireguard&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s2"&gt;&amp;#34;51820:51820/udp&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s2"&gt;&amp;#34;51821:51821/tcp&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# WG_LOCAL_NAME为流量代理配置名，请先创建WG_LOCAL_NAME配置&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# - PASSWORD=p&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;WG_HOST=&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;PASSWORD=&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;WG_ALLOWED_IPS=192.168.80.0/24, 10.0.0.0/24, 100.100.1.0/24&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 挂载网段&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;WG_DEFAULT_ADDRESS=10.0.0.x &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# wg的虚拟网段&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;WG_DEFAULT_DNS=8.8.8.8&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# wg的DNS&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;WG_LOCAL_PASS=192.168.80.132&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 此处ip为本地网卡ip,流量出口&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;WG_PERSISTENT_KEEPALIVE=25&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;WG_LOCAL_NAME=l1aotest&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cap_add&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;NET_ADMIN&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;SYS_MODULE&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;sysctls&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;net.ipv4.ip_forward=1&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;net.ipv4.conf.all.src_valid_mark=1&lt;/span&gt;&lt;span class="w"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker-compose -f docker-compose.dev.yml up &lt;span class="c1"&gt;# 启动服务&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;ol&gt;&#10;&lt;li&gt;web端下发配置，首先创建一个 WG_LOCAL_NAME 配置，并下载到内网机子上（web端验证为 rois:l1ao，wg-easy登陆为PASSWORD你设置的）&lt;/li&gt;&#10;&lt;li&gt;在内网机子上打开IP转发：编辑 &lt;code&gt;/etc/sysctl.conf&lt;/code&gt;， 将 &lt;code&gt;net.ipv4.ip_forward = 0&lt;/code&gt; 中的 &lt;code&gt;0&lt;/code&gt; 改为 &lt;code&gt;1&lt;/code&gt;。然后 &lt;code&gt;sysctl -p&lt;/code&gt; 使其生效。&lt;/li&gt;&#10;&lt;li&gt;内网机子必须是linux主机，windows做转发会有很多bug，执行命令&lt;code&gt;sudo wg-quick up 配置文件的绝对路径&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;测试 ping 云服务器 10.0.0.1 不成功的话重启 云服务器的wireguard服务 再重启内网机子的 wireguard，测试ping，能ping通则可以进行内网转发了&lt;/li&gt;&#10;&lt;li&gt;web端下发配置，创建个人PC的配置，并下载到个人PC上，启动vpn&lt;/li&gt;&#10;&lt;li&gt;访问内网服务&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="示例配置"&gt;示例配置&#10;&lt;/h2&gt;&lt;h3 id="10001云服务器的配置"&gt;10.0.0.1云服务器的配置&#10;&lt;/h3&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;# Note: Do not edit this file directly.&#10;# Your changes will be overwritten!&#10;&#10;# Server&#10;[Interface]&#10;PrivateKey = &#10;Address = 10.0.0.1/24&#10;ListenPort = 51820&#10;PreUp = &#10;Postup = iptables -A INPUT -p tcp -m tcp --dport 51821 -j ACCEPT;&#10;PostUp = iptables -A INPUT -p udp -m udp --dport 51820 -j ACCEPT; iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; &#10;PostUp = iptables -I FORWARD -s 10.0.0.0/24 -i wg0 -d 10.0.0.0/24 -j ACCEPT&#10;PostUp = iptables -I FORWARD -s 10.0.0.0/24 -i wg0 -d 0.0.0.0/0 -j ACCEPT&#10;PostUp = iptables -I FORWARD -s 0.0.0.0/0 -i wg0 -d 10.0.0.0/24 -j ACCEPT&#10;&#10;PreDown = &#10;Postup = iptables -D INPUT -p tcp -m tcp --dport 51821 -j ACCEPT;&#10;PostDown = iptables -D INPUT -p udp -m udp --dport 51820 -j ACCEPT; iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; &#10;PostDown = iptables -D FORWARD -s 10.0.0.0/24 -i wg0 -d 10.0.0.0/24 -j ACCEPT&#10;PostDown = iptables -D FORWARD -s 10.0.0.0/24 -i wg0 -d 0.0.0.0/0 -j ACCEPT&#10;PostDown = iptables -D FORWARD -s 0.0.0.0/0 -i wg0 -d 10.0.0.0/24 -j ACCEPT&#10;&#10;&#10;# Client: l1aotest (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)&#10;[Peer]&#10;PublicKey = &#10;PresharedKey = &#10;AllowedIPs = 10.0.0.2/32, 192.168.80.0/24, 10.0.0.0/24, 100.100.1.0/24&#10;&#10;# Client: l1ao&amp;#39;s iphone (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)&#10;[Peer]&#10;PublicKey = &#10;PresharedKey = &#10;AllowedIPs = 10.0.0.3/32&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="10002内网机子的配置"&gt;10.0.0.2内网机子的配置&#10;&lt;/h3&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;[Interface]&#10;PrivateKey = &#10;Address = 10.0.0.2/24&#10;PostUp = iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source 192.168.80.132 &#10;PostDown = iptables -t nat -D POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source 192.168.80.132&#10;DNS = 8.8.8.8&#10;&#10;&#10;[Peer]&#10;PublicKey = &#10;PresharedKey = &#10;AllowedIPs = 10.0.0.0/24&#10;PersistentKeepalive = 25&#10;Endpoint = WG_HOST:51820&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="个人pc的配置"&gt;个人PC的配置&#10;&lt;/h3&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;[Interface] &#10;PrivateKey = &#10;Address = 10.0.0.3/24 &#10;DNS = 8.8.8.8 &#10;&#10;[Peer] &#10;PublicKey = &#10;PresharedKey = &#10;AllowedIPs = 192.168.80.0/24, 10.0.0.0/24, 100.100.1.0/24 &#10;PersistentKeepalive = 25 &#10;Endpoint = WG_HOST:51820&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="参考"&gt;参考&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://devld.me/2020/07/27/wireguard-setup/" target="_blank" rel="noopener"&#10; &gt;https://devld.me/2020/07/27/wireguard-setup/&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://github.com/WeeJeWel/wg-easy" target="_blank" rel="noopener"&#10; &gt;https://github.com/WeeJeWel/wg-easy&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;</description></item></channel></rss>