<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://md5.pw/index.php?action=history&amp;feed=atom&amp;title=%E4%BD%BF%E7%94%A8%E6%90%AC%E7%93%A6%E5%B7%A5api%E6%93%8D%E4%BD%9Cnftables%E5%AE%9E%E7%8E%B0%E6%9B%B4%E6%96%B0%E7%99%BD%E5%90%8D%E5%8D%95ip</id>
	<title>使用搬瓦工api操作nftables实现更新白名单ip - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://md5.pw/index.php?action=history&amp;feed=atom&amp;title=%E4%BD%BF%E7%94%A8%E6%90%AC%E7%93%A6%E5%B7%A5api%E6%93%8D%E4%BD%9Cnftables%E5%AE%9E%E7%8E%B0%E6%9B%B4%E6%96%B0%E7%99%BD%E5%90%8D%E5%8D%95ip"/>
	<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=%E4%BD%BF%E7%94%A8%E6%90%AC%E7%93%A6%E5%B7%A5api%E6%93%8D%E4%BD%9Cnftables%E5%AE%9E%E7%8E%B0%E6%9B%B4%E6%96%B0%E7%99%BD%E5%90%8D%E5%8D%95ip&amp;action=history"/>
	<updated>2026-05-06T13:19:33Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://md5.pw/index.php?title=%E4%BD%BF%E7%94%A8%E6%90%AC%E7%93%A6%E5%B7%A5api%E6%93%8D%E4%BD%9Cnftables%E5%AE%9E%E7%8E%B0%E6%9B%B4%E6%96%B0%E7%99%BD%E5%90%8D%E5%8D%95ip&amp;diff=1217&amp;oldid=prev</id>
		<title>2026年1月26日 (一) 17:38 Liam</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=%E4%BD%BF%E7%94%A8%E6%90%AC%E7%93%A6%E5%B7%A5api%E6%93%8D%E4%BD%9Cnftables%E5%AE%9E%E7%8E%B0%E6%9B%B4%E6%96%B0%E7%99%BD%E5%90%8D%E5%8D%95ip&amp;diff=1217&amp;oldid=prev"/>
		<updated>2026-01-26T17:38:36Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2026年1月26日 (一) 10:38的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l919&quot;&gt;第919行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第919行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;如果成功更新ip了 就可以把允许ssh的端口删掉了就真正变成白名单模式了&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;如果成功更新ip了 就可以把允许ssh的端口删掉了就真正变成白名单模式了&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:500 常见应用指南 — Application Guides]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Liam</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=%E4%BD%BF%E7%94%A8%E6%90%AC%E7%93%A6%E5%B7%A5api%E6%93%8D%E4%BD%9Cnftables%E5%AE%9E%E7%8E%B0%E6%9B%B4%E6%96%B0%E7%99%BD%E5%90%8D%E5%8D%95ip&amp;diff=1202&amp;oldid=prev</id>
		<title>EliToviyah：​修改一些顺序</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=%E4%BD%BF%E7%94%A8%E6%90%AC%E7%93%A6%E5%B7%A5api%E6%93%8D%E4%BD%9Cnftables%E5%AE%9E%E7%8E%B0%E6%9B%B4%E6%96%B0%E7%99%BD%E5%90%8D%E5%8D%95ip&amp;diff=1202&amp;oldid=prev"/>
		<updated>2026-01-26T11:31:19Z</updated>

		<summary type="html">&lt;p&gt;修改一些顺序&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2026年1月26日 (一) 04:31的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l87&quot;&gt;第87行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第87行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;如果是table ip filter就把FAMILY=&amp;quot;inet&amp;quot; 改成 FAMILY=&amp;quot;ip&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;如果是table ip filter就把FAMILY=&amp;quot;inet&amp;quot; 改成 FAMILY=&amp;quot;ip&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;这里还&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;有一个位置需要&lt;/del&gt;输入 &amp;lt;code&amp;gt;ls /root/update_fw.sh&amp;lt;/code&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;这里还&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;应该&lt;/ins&gt;输入 &amp;lt;code&amp;gt;ls /root/update_fw.sh&amp;lt;/code&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&#039;&#039;&#039;检查&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;这个&lt;/del&gt;目录是否有一个叫update_fw.sh如果有的话你也需要修改 避免被覆盖&#039;&#039;&#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&#039;&#039;&#039;检查&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;/root&lt;/ins&gt;目录是否有一个叫update_fw.sh&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;的文件 &lt;/ins&gt;如果有的话你也需要修改 避免被覆盖&#039;&#039;&#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;上面 蓝色框框的 说明 有存在的同名文件 那你就需要修改 成 &amp;gt; /root/别的文件名.sh那么下文中的所有/root/update_fw.sh都要改成你自己的文件名&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;上面 蓝色框框的 说明 有存在的同名文件 那你就需要修改 成 &amp;gt; /root/别的文件名.sh那么下文中的所有/root/update_fw.sh都要改成你自己的文件名&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l317&quot;&gt;第317行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第317行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;请根据你实际的veid和API_Key修改&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;请根据你实际的veid和API_Key修改&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;这两个如果你知道干嘛的也可以改 &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;CACHE_FILE=&quot;/etc/config/vps_last_ip&quot;  &lt;/del&gt;保存上传的ip防止重复调&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;用API LOG_FILE&lt;/del&gt;=&quot;/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;tmp&lt;/del&gt;/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;vps_sync_error.log&lt;/del&gt;&quot; &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; &lt;/del&gt;把执行过程和结果保存到这个文件里&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;这两个如果你知道干嘛的也可以改  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;保存上传的ip防止重复调&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;用&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;CACHE_FILE&lt;/ins&gt;=&quot;/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;etc/config&lt;/ins&gt;/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;vps_last_ip&lt;/ins&gt;&quot; &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt; &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;把执行过程和结果保存到这个文件里&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;API LOG_FILE=&quot;/tmp/vps_sync_error.log&quot; &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;最后要检查的 输入 &amp;lt;code&amp;gt;ls /etc/hotplug.d/iface/99-sync-vps-firewall&amp;lt;/code&amp;gt;  检查一下 有没有同名的其他脚本&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;最后要检查的 输入 &amp;lt;code&amp;gt;ls /etc/hotplug.d/iface/99-sync-vps-firewall&amp;lt;/code&amp;gt;  检查一下 有没有同名的其他脚本&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l832&quot;&gt;第832行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第840行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;修改以下代码中的&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;修改以下代码中的&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;code&amp;gt;ExecStart=/bin/sh -c &quot;/usr/bin/socat -u UDP-RECV:514 STDOUT | /root/checkip.sh&quot;&amp;lt;/code&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;UDP-RECV:514 把514换成你的路由器那里设置的 远程记录服务器端口 比如 515 就改成 UDP-RECV:515&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;UDP-RECV:514 把514换成你的路由器那里设置的 远程记录服务器端口 比如 515 就改成 UDP-RECV:515&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[File:Logre.png|border]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[File:Logre.png|border]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;code&amp;gt;ExecStart=/bin/sh -c &amp;quot;/usr/bin/socat -u UDP-RECV:514 STDOUT | /root/checkip.sh&amp;quot;&amp;lt;/code&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;code&amp;gt;ExecStart=/bin/sh -c &amp;quot;/usr/bin/socat -u UDP-RECV:514 STDOUT | /root/checkip.sh&amp;quot;&amp;lt;/code&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>EliToviyah</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=%E4%BD%BF%E7%94%A8%E6%90%AC%E7%93%A6%E5%B7%A5api%E6%93%8D%E4%BD%9Cnftables%E5%AE%9E%E7%8E%B0%E6%9B%B4%E6%96%B0%E7%99%BD%E5%90%8D%E5%8D%95ip&amp;diff=1192&amp;oldid=prev</id>
		<title>EliToviyah：​再次修复排版...</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=%E4%BD%BF%E7%94%A8%E6%90%AC%E7%93%A6%E5%B7%A5api%E6%93%8D%E4%BD%9Cnftables%E5%AE%9E%E7%8E%B0%E6%9B%B4%E6%96%B0%E7%99%BD%E5%90%8D%E5%8D%95ip&amp;diff=1192&amp;oldid=prev"/>
		<updated>2026-01-26T06:01:28Z</updated>

		<summary type="html">&lt;p&gt;再次修复排版...&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2026年1月25日 (日) 23:01的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l555&quot;&gt;第555行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第555行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ssh连接后&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ssh连接后&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;====== &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;&#039;&#039;&lt;/del&gt;切换到root账户&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;&#039;&#039; &lt;/del&gt;======&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;====== &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;切换到root账户 ======&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* 输入命令：&amp;lt;code&amp;gt;su -&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;(注意：su 后面有个空格和减号，这很重要，代表同时切换环境变量)&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* 输入命令：&amp;lt;code&amp;gt;su -&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;(注意：su 后面有个空格和减号，这很重要，代表同时切换环境变量)&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* 输入 Root 密码（输入时看不见）。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* 输入 Root 密码（输入时看不见）。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>EliToviyah</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=%E4%BD%BF%E7%94%A8%E6%90%AC%E7%93%A6%E5%B7%A5api%E6%93%8D%E4%BD%9Cnftables%E5%AE%9E%E7%8E%B0%E6%9B%B4%E6%96%B0%E7%99%BD%E5%90%8D%E5%8D%95ip&amp;diff=1191&amp;oldid=prev</id>
		<title>EliToviyah：​修复排版</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=%E4%BD%BF%E7%94%A8%E6%90%AC%E7%93%A6%E5%B7%A5api%E6%93%8D%E4%BD%9Cnftables%E5%AE%9E%E7%8E%B0%E6%9B%B4%E6%96%B0%E7%99%BD%E5%90%8D%E5%8D%95ip&amp;diff=1191&amp;oldid=prev"/>
		<updated>2026-01-26T06:00:04Z</updated>

		<summary type="html">&lt;p&gt;修复排版&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2026年1月25日 (日) 23:00的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l554&quot;&gt;第554行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第554行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===== 另外一台Linux服务器部分 不是防火墙所在的那个服务器哦 =====&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===== 另外一台Linux服务器部分 不是防火墙所在的那个服务器哦 =====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ssh连接后&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;ssh连接后&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;&#039;&#039;切换到root账户&#039;&#039;&#039;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;====== &#039;&#039;&#039;切换到root账户&#039;&#039;&#039; ======&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* 输入命令：&amp;lt;code&amp;gt;su -&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;(注意：su 后面有个空格和减号，这很重要，代表同时切换环境变量)&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* 输入命令：&amp;lt;code&amp;gt;su -&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;(注意：su 后面有个空格和减号，这很重要，代表同时切换环境变量)&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* 输入 Root 密码（输入时看不见）。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* 输入 Root 密码（输入时看不见）。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>EliToviyah</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=%E4%BD%BF%E7%94%A8%E6%90%AC%E7%93%A6%E5%B7%A5api%E6%93%8D%E4%BD%9Cnftables%E5%AE%9E%E7%8E%B0%E6%9B%B4%E6%96%B0%E7%99%BD%E5%90%8D%E5%8D%95ip&amp;diff=1182&amp;oldid=prev</id>
		<title>EliToviyah：​增加一个可能出错的小提示</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=%E4%BD%BF%E7%94%A8%E6%90%AC%E7%93%A6%E5%B7%A5api%E6%93%8D%E4%BD%9Cnftables%E5%AE%9E%E7%8E%B0%E6%9B%B4%E6%96%B0%E7%99%BD%E5%90%8D%E5%8D%95ip&amp;diff=1182&amp;oldid=prev"/>
		<updated>2026-01-26T02:37:50Z</updated>

		<summary type="html">&lt;p&gt;增加一个可能出错的小提示&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2026年1月25日 (日) 19:37的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l843&quot;&gt;第843行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第843行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;如果你的文件名改了的话 就需要修改… 没改就不用改..&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;如果你的文件名改了的话 就需要修改… 没改就不用改..&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;修改好 全部选择 复制粘贴到ssh里面 然后按回车&amp;lt;syntaxhighlight lang=&quot;bash&quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;同理 &amp;lt;code&amp;gt;/etc/systemd/system/router-log-watcher.service&amp;lt;/code&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;cat &amp;lt;&amp;lt; &#039;EOF&#039; &amp;gt; /etc/systemd/system/router-log-watcher.service&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;这个地方你也应该输入 &amp;lt;code&amp;gt;ls /etc/systemd/system/router-log-watcher.service&amp;lt;/code&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;查看文件是否存在.如果存在就改名字 如果不存在就不用改了 和上面服务器部分的 ls /root/update_fw.sh 一样&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;修改好 全部选择 复制粘贴到ssh里面 然后按回车&amp;lt;syntaxhighlight lang=&quot;bash&quot;&amp;gt;cat &amp;lt;&amp;lt; &#039;EOF&#039; &amp;gt; /etc/systemd/system/router-log-watcher.service&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[Unit]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[Unit]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Description=Router Log Watcher&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Description=Router Log Watcher&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l860&quot;&gt;第860行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第865行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[Install]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[Install]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;WantedBy=multi-user.target&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;WantedBy=multi-user.target&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;EOF&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;EOF&amp;lt;/syntaxhighlight&amp;gt;这个不怎么混乱 直接回车就行&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;这个不怎么混乱 直接回车就行&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;然后 &amp;lt;code&amp;gt;cat /etc/systemd/system/router-log-watcher.service&amp;lt;/code&amp;gt; 如果你的文件名字 如果不是这个的话请修改&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;然后 &amp;lt;code&amp;gt;cat /etc/systemd/system/router-log-watcher.service&amp;lt;/code&amp;gt; 如果你的文件名字 如果不是这个的话请修改&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>EliToviyah</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=%E4%BD%BF%E7%94%A8%E6%90%AC%E7%93%A6%E5%B7%A5api%E6%93%8D%E4%BD%9Cnftables%E5%AE%9E%E7%8E%B0%E6%9B%B4%E6%96%B0%E7%99%BD%E5%90%8D%E5%8D%95ip&amp;diff=1181&amp;oldid=prev</id>
		<title>EliToviyah：​添加一个...有可能出错的示例</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=%E4%BD%BF%E7%94%A8%E6%90%AC%E7%93%A6%E5%B7%A5api%E6%93%8D%E4%BD%9Cnftables%E5%AE%9E%E7%8E%B0%E6%9B%B4%E6%96%B0%E7%99%BD%E5%90%8D%E5%8D%95ip&amp;diff=1181&amp;oldid=prev"/>
		<updated>2026-01-26T02:34:59Z</updated>

		<summary type="html">&lt;p&gt;添加一个...有可能出错的示例&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2026年1月25日 (日) 19:34的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l86&quot;&gt;第86行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第86行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;如果是table ip filter就把FAMILY=&amp;quot;inet&amp;quot; 改成 FAMILY=&amp;quot;ip&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;如果是table ip filter就把FAMILY=&amp;quot;inet&amp;quot; 改成 FAMILY=&amp;quot;ip&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;这里还有一个位置需要输入 &amp;lt;code&amp;gt;ls /root/update_fw.sh&amp;lt;/code&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&#039;&#039;&#039;检查这个目录是否有一个叫update_fw.sh如果有的话你也需要修改 避免被覆盖&#039;&#039;&#039;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;上面 蓝色框框的 说明 有存在的同名文件 那你就需要修改 成 &amp;gt; /root/别的文件名.sh那么下文中的所有/root/update_fw.sh都要改成你自己的文件名&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;下面红色框框说明没有找到这个文件就 不用改名了 直接使用就行&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[File:Catcheckfilehave.png|border]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;在下面的代码框里的对应位置改 可以先复制到记事本上 改完再全选重新复制 粘贴到ssh里面 回车&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;在下面的代码框里的对应位置改 可以先复制到记事本上 改完再全选重新复制 粘贴到ssh里面 回车&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l222&quot;&gt;第222行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第235行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;这样，只有 root 用户能看到这个脚本的内容，也只有 root 能运行它。&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;这样，只有 root 用户能看到这个脚本的内容，也只有 root 能运行它。&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== 调用API部分 ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== 调用API部分 ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>EliToviyah</name></author>
	</entry>
	<entry>
		<id>https://md5.pw/index.php?title=%E4%BD%BF%E7%94%A8%E6%90%AC%E7%93%A6%E5%B7%A5api%E6%93%8D%E4%BD%9Cnftables%E5%AE%9E%E7%8E%B0%E6%9B%B4%E6%96%B0%E7%99%BD%E5%90%8D%E5%8D%95ip&amp;diff=1173&amp;oldid=prev</id>
		<title>EliToviyah：​创建 使用bash 调用api 操作nftables 刷新白名单ip</title>
		<link rel="alternate" type="text/html" href="https://md5.pw/index.php?title=%E4%BD%BF%E7%94%A8%E6%90%AC%E7%93%A6%E5%B7%A5api%E6%93%8D%E4%BD%9Cnftables%E5%AE%9E%E7%8E%B0%E6%9B%B4%E6%96%B0%E7%99%BD%E5%90%8D%E5%8D%95ip&amp;diff=1173&amp;oldid=prev"/>
		<updated>2026-01-25T08:26:10Z</updated>

		<summary type="html">&lt;p&gt;创建 使用bash 调用api 操作nftables 刷新白名单ip&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== &amp;#039;&amp;#039;&amp;#039;&amp;lt;big&amp;gt;请注意不要泄漏API_Key 任何时候都不要泄露 防止服务器和API被盗用 应当在安全的设备上使用API 防止API_Key被盗取&amp;lt;/big&amp;gt;&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;#039;&amp;#039;&amp;#039;根据可实时知晓ip变化的办法不同 您需要的工具也不相同..最多需要多一台本地的Linux服务器(不是防火墙所在的那个服务器哦)&amp;#039;&amp;#039;&amp;#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 使用前准备 ==&lt;br /&gt;
&lt;br /&gt;
=== 切换到root或有高权限的用户 ===&lt;br /&gt;
输入&amp;lt;code&amp;gt;whoami&amp;lt;/code&amp;gt;(蓝色输出)或者查看 @之前的名字(绿色框)就是使用的用户&lt;br /&gt;
&lt;br /&gt;
[[File:Whoami2.png|border]]&lt;br /&gt;
&lt;br /&gt;
如果是root就是root就可以了&lt;br /&gt;
&lt;br /&gt;
如果不是&lt;br /&gt;
&lt;br /&gt;
[[File:Suroot.png|border]]&lt;br /&gt;
&lt;br /&gt;
你输入 &amp;lt;code&amp;gt;nft list ruleset&amp;lt;/code&amp;gt; 或者 &amp;lt;code&amp;gt;sudo nft list ruleset&amp;lt;/code&amp;gt; 输入你的密码 和上图一样 说明没权限….&lt;br /&gt;
&lt;br /&gt;
尝试切换到root账户&lt;br /&gt;
&lt;br /&gt;
输入 &amp;lt;code&amp;gt;su -&amp;lt;/code&amp;gt; 然后输入 &amp;#039;&amp;#039;&amp;#039;root 用户&amp;#039;&amp;#039;&amp;#039;的密码。输入的密码不会显示 输入好后按回车就行 变成root就说明成功了&lt;br /&gt;
&lt;br /&gt;
[[File:Suroot2.png|border]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 防火墙部分 ===&lt;br /&gt;
输入 &amp;lt;code&amp;gt;sudo nft list ruleset&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Nftlist.png|border]]&lt;br /&gt;
&lt;br /&gt;
你的防火墙中应该有一个空白的链 专用户白名单 然后在含有粉色框框(主要是含有hook input就行)代码的链中 jump这个链 另外先不要改成policy drop;&lt;br /&gt;
&lt;br /&gt;
如果没有链的话 如何创建链&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo nft add chain inet my_firewall allowed_ip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
请根据自己的表的类型inet 表的名字 my_firewall 自行修改哦&lt;br /&gt;
&lt;br /&gt;
allowed_ip可以改成自己想要的名字 比如sudo &amp;lt;code&amp;gt;nft add chain inet my_firewall whiteip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
要先有链 才能jump 链的名字&lt;br /&gt;
&lt;br /&gt;
如何添加一条jump allowed_ip 规则呢&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sudo nft add rule inet my_firewall my_input jump allowed_ip&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
还是一样要修改成自己的表的类型 表的名字 刚刚创建的链的名字&lt;br /&gt;
&lt;br /&gt;
要把这个jump allowed_ip 添加到 含有粉色代码的chain里面也就是(my_input)&lt;br /&gt;
&lt;br /&gt;
=== 服务器部分 ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;创建一个脚本 用 API 调用这个脚本就好了 免去了 API中过多的指令&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;如果你是从 [[服务器安全-防火墙 nftables]] 那文章一步一步 没有修改防火墙的表 链 的话 直接复制代码框的全部内容 粘贴到ssh里面 按回车 文件就创建好了&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
如果你修改了防火墙的表和链的名字 或不是根据 那篇文章来的 &lt;br /&gt;
&lt;br /&gt;
请修改下面代码中的内容 根据自身情况修改 只需要修改=后面 “” 双引号里面的内容&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Nftlist3.png|border]]&lt;br /&gt;
&lt;br /&gt;
* TABLE_NAME=&amp;quot;my_firewall&amp;quot;&lt;br /&gt;
** 这个是表的名字 蓝色框框&lt;br /&gt;
* CHAIN_NAME=&amp;quot;allowed_ip&amp;quot;&lt;br /&gt;
** 这个是链的名字 绿色框框 这个链的名字一定不是你 包含 hook input 粉色这一行的那个链..因为会被清空..然后就会可能导致防火墙规则混乱…一定要是另外一个专门的链&lt;br /&gt;
* FAMILY=&amp;quot;inet&amp;quot;&lt;br /&gt;
** 这个是表类型 红色框框&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;示例&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[File:Nftlist3-1.png|border]]&lt;br /&gt;
&lt;br /&gt;
如示例中的图就要改成这样的&lt;br /&gt;
&lt;br /&gt;
CHAIN_NAME=&amp;quot;allowed_mobile&amp;quot; TABLE_NAME=&amp;quot;filter&amp;quot;&lt;br /&gt;
&lt;br /&gt;
FAMILY=&amp;quot;inet&amp;quot; 不变&lt;br /&gt;
&lt;br /&gt;
如果是table ip filter就把FAMILY=&amp;quot;inet&amp;quot; 改成 FAMILY=&amp;quot;ip&amp;quot;&lt;br /&gt;
&lt;br /&gt;
在下面的代码框里的对应位置改 可以先复制到记事本上 改完再全选重新复制 粘贴到ssh里面 回车&lt;br /&gt;
&lt;br /&gt;
[[File:Apiconfig.png|border]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;代码框的脚本如下:&amp;#039;&amp;#039;&amp;#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; &amp;#039;EOF&amp;#039; &amp;gt; /root/update_fw.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# --- 用户配置区 ---&lt;br /&gt;
TABLE_NAME=&amp;quot;my_firewall&amp;quot;&lt;br /&gt;
CHAIN_NAME=&amp;quot;allowed_ip&amp;quot;&lt;br /&gt;
FAMILY=&amp;quot;inet&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# --- 获取参数并剔除所有空格 ---&lt;br /&gt;
IP1=$(echo &amp;quot;$1&amp;quot; | tr -d &amp;#039;[:space:]&amp;#039;)&lt;br /&gt;
IP2=$(echo &amp;quot;$2&amp;quot; | tr -d &amp;#039;[:space:]&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
VALID_IPS=()&lt;br /&gt;
NFT_TYPES=()&lt;br /&gt;
SUCCESS_LIST=&amp;quot;&amp;quot;&lt;br /&gt;
FAILED_LIST=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# --- IP 校验函数 ---&lt;br /&gt;
check_ip() {&lt;br /&gt;
    local input=$1&lt;br /&gt;
    [[ -z &amp;quot;$input&amp;quot; ]] &amp;amp;&amp;amp; return 1&lt;br /&gt;
    &lt;br /&gt;
    local raw_ip=&amp;quot;${input%/*}&amp;quot;&lt;br /&gt;
    local mask=&amp;quot;${input#*/}&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # 自动识别默认掩码&lt;br /&gt;
    if [[ &amp;quot;$input&amp;quot; != */* ]]; then&lt;br /&gt;
        if [[ &amp;quot;$raw_ip&amp;quot; =~ : ]]; then mask=128; else mask=32; fi&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # 1. IPv4 校验&lt;br /&gt;
    # 原来的 2[0-4][0-5] 改为了 2[0-4][0-9]&lt;br /&gt;
    if [[ &amp;quot;$raw_ip&amp;quot; =~ ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$ ]]; then&lt;br /&gt;
        [[ &amp;quot;$mask&amp;quot; -lt 1 || &amp;quot;$mask&amp;quot; -gt 32 ]] &amp;amp;&amp;amp; return 1&lt;br /&gt;
        echo &amp;quot;ip|$raw_ip/$mask&amp;quot;&lt;br /&gt;
        return 0&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # 2. IPv6 校验 (简化版正则，兼容性更好)&lt;br /&gt;
    if [[ &amp;quot;$raw_ip&amp;quot; =~ ^(([0-9a-fA-F]{1,4}:){1,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|:(:[0-9a-fA-F]{1,4}){1,7}|::|([0-9a-fA-F]{1,4}:){1,7}:[0-9a-fA-F]{1,4})$ ]]; then&lt;br /&gt;
        [[ &amp;quot;$mask&amp;quot; -lt 1 || &amp;quot;$mask&amp;quot; -gt 128 ]] &amp;amp;&amp;amp; return 1&lt;br /&gt;
        echo &amp;quot;ip6|$raw_ip/$mask&amp;quot;&lt;br /&gt;
        return 0&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    return 1&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
process_arg() {&lt;br /&gt;
    local arg=$1&lt;br /&gt;
    [ -z &amp;quot;$arg&amp;quot; ] &amp;amp;&amp;amp; return&lt;br /&gt;
    local res&lt;br /&gt;
    res=$(check_ip &amp;quot;$arg&amp;quot;)&lt;br /&gt;
    if [ $? -eq 0 ]; then&lt;br /&gt;
        local full_ip=&amp;quot;${res#*|}&amp;quot;&lt;br /&gt;
        VALID_IPS+=(&amp;quot;$full_ip&amp;quot;)&lt;br /&gt;
        NFT_TYPES+=(&amp;quot;${res%|*}&amp;quot;)&lt;br /&gt;
        SUCCESS_LIST+=&amp;quot;$full_ip &amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        FAILED_LIST+=&amp;quot;$arg &amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
process_arg &amp;quot;$IP1&amp;quot;&lt;br /&gt;
process_arg &amp;quot;$IP2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# --- 极简反馈逻辑 ---&lt;br /&gt;
if [ ${#VALID_IPS[@]} -eq 0 ]; then&lt;br /&gt;
    echo &amp;quot;Error: No valid IP provided ($FAILED_LIST)&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 执行 Nftables 操作&lt;br /&gt;
nft flush chain $FAMILY $TABLE_NAME $CHAIN_NAME || { echo &amp;quot;Error: NFT chain not found&amp;quot;; exit 1; }&lt;br /&gt;
&lt;br /&gt;
for i in &amp;quot;${!VALID_IPS[@]}&amp;quot;; do&lt;br /&gt;
    nft add rule $FAMILY $TABLE_NAME $CHAIN_NAME ${NFT_TYPES[$i]} saddr ${VALID_IPS[$i]} accept&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
# 成功返回&lt;br /&gt;
echo &amp;quot;OK: Allowed $SUCCESS_LIST&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;解释一下代码框里面指令的意思&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;cat&amp;lt;/code&amp;gt; (Concatenate)&amp;#039;&amp;#039;&amp;#039;：原本是用来“查看”或“拼接”内容的，但在这种组合中，它负责接收你输入的一大段文字。&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;&amp;lt;&amp;lt;&amp;lt;/code&amp;gt; (输入重定向)&amp;#039;&amp;#039;&amp;#039;：这叫“在此处开始读取”。它告诉系统：“别去翻别的文件了，接下来的内容就是我要给你的，直到我遇到结束标记为止。”&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;&amp;#039;EOF&amp;#039;&amp;lt;/code&amp;gt; (End Of File)&amp;#039;&amp;#039;&amp;#039;：&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;开始标志&amp;#039;&amp;#039;&amp;#039;：它是你自定义的一个“暗号”。&lt;br /&gt;
** &amp;#039;&amp;#039;&amp;#039;为什么要加单引号 &amp;lt;code&amp;gt;&amp;#039; &amp;#039;&amp;lt;/code&amp;gt;？&amp;#039;&amp;#039;&amp;#039;： 加了单引号，系统就会“原样搬运”中间的内容，不会去解析里面的 &amp;lt;code&amp;gt;$变量&amp;lt;/code&amp;gt;。这对于写入包含变量的脚本至关重要，否则这些变量在写入文件前就会被当前系统搞乱。&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;&amp;gt;&amp;lt;/code&amp;gt; (覆盖写入)&amp;#039;&amp;#039;&amp;#039;：它的意思是“清空目标文件并把内容倒进去”。&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;/root/update_fw.sh&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039;：这是目的地。系统会在指定路径创建或覆盖这个脚本文件。&lt;br /&gt;
* 中间的内容 就是要写入文件的内容 是我们的核心代码&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;最后的 &amp;lt;code&amp;gt;EOF&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039;：这是“结束暗号”。系统看到它，就知道“打包”结束了，正式保存文件。&lt;br /&gt;
&lt;br /&gt;
[[File:Apinftedit1.png|border]]&lt;br /&gt;
&lt;br /&gt;
我们可以看到最后蓝色框的时候 有点混乱 没事的 直接按回车就行了&lt;br /&gt;
&lt;br /&gt;
然后我们可以输入 &amp;lt;code&amp;gt;cat /root/update_fw.sh&amp;lt;/code&amp;gt;  查看一下文件内容 确认有写入内容就好了&lt;br /&gt;
&lt;br /&gt;
[[File:Catupdateip.png|border]]&lt;br /&gt;
&lt;br /&gt;
创建好后&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Apinftquanxian.png|border]]&lt;br /&gt;
&lt;br /&gt;
你可以先输入 &amp;lt;code&amp;gt;ls -l /root/update_fw.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这个意思是 以长格式 查看/root/update_fw.sh 文件的信息&lt;br /&gt;
&lt;br /&gt;
* 第一位 - 代表是文件的意思 d是目录&lt;br /&gt;
* 第二位到第四位 rw- 就是 拥有这个文件的人的权限 第一个代表的是读取 如果有这个权限显示r如果没有就是-第二个是写入(编辑)的权限有这个权限就显示w没有就是-第三位是执行(运行)这个文件的权限有就显示x没有就显示- 这里显示-证明在chmod之前是没有执行权限的&lt;br /&gt;
* &amp;lt;code&amp;gt;r--&amp;lt;/code&amp;gt; 这个文件所属组 的权限 同上 第一位是读取r说明有 第二位是-说明没有写入权限 第三位是-说明没有执行权限&lt;br /&gt;
* &amp;lt;code&amp;gt;r--&amp;lt;/code&amp;gt; 这个是其他人 也是一样的 有读取权限 没有写入和执行权限&lt;br /&gt;
* 1 代表这个文件在磁盘上只有这一个‘&lt;br /&gt;
* root root 第一个root 代表拥有这个文件的人 第二个 root 代表这个文件属于root组&lt;br /&gt;
* 2675 文件大小Byte&lt;br /&gt;
* Jan 22 01:07 修改时间&lt;br /&gt;
* /root/update_fw.sh 文件信息的文件&lt;br /&gt;
&lt;br /&gt;
为了安全取消掉其他的权限我们输入&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;chmod 700 /root/update_fw.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这个指令的意思是 设置这个文件的权限是700 700的意思就是只有这个文件的拥有人(root ls -l看到的)才可以读取写入和执行 其他的两个0代表 所属组没有任何权限和 其他所有人没有任何权限。&lt;br /&gt;
&lt;br /&gt;
这样，只有 root 用户能看到这个脚本的内容，也只有 root 能运行它。&lt;br /&gt;
&lt;br /&gt;
=== 调用API部分 ===&lt;br /&gt;
获取 搬瓦工服务器的API_Key和veid&lt;br /&gt;
&lt;br /&gt;
请参考 [[搬瓦工api使用]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 使用搬瓦工API触发服务器上的脚本变更防火墙nftables的chain 从而实现动态更新白名单ip ==&lt;br /&gt;
&lt;br /&gt;
=== ipv6的网段 V6_MASK ===&lt;br /&gt;
这个..如果你想同时更新ipv6的白名单 有一个问题&lt;br /&gt;
&lt;br /&gt;
就是ipv6 每个设备都有一个ipv6地址(各不相同) ipv4的时候你用电脑手机连接到同一个路由器的话一般都是走的同一个ipv4地址 而ipv6不同…所以如果你只是更新了你这个设备的ipv6地址的话…别的设备仍然不在白名单中…这就需要网段&lt;br /&gt;
&lt;br /&gt;
==== 请登录路由器 ====&lt;br /&gt;
[[File:Router1.png|border]]&lt;br /&gt;
&lt;br /&gt;
找到这个前缀长度…把V6_MASK改成60就行了这样就是说 连接路由器的 都可以进白名单了&lt;br /&gt;
&lt;br /&gt;
所有的代码中都有一个可以修改的变量.. V6_MASK=&amp;quot;/64&amp;quot; 单个设备请改为 /128 一些地区可能是48 但48有点危险范围太大 你的邻居可能也在这之中 那为什么是64呢 因为我的是64……哦 我记错了 我是60….&lt;br /&gt;
&lt;br /&gt;
== 可实时更新ip变化的办法 ==&lt;br /&gt;
&lt;br /&gt;
=== Linux系 ===&lt;br /&gt;
&lt;br /&gt;
==== OpenWrt类 ====&lt;br /&gt;
&lt;br /&gt;
===== 检查是否安装了curl =====&lt;br /&gt;
输入 &amp;lt;code&amp;gt;curl&amp;lt;/code&amp;gt;  如果显示 -ash: curl not found&lt;br /&gt;
&lt;br /&gt;
安装curl和证书 为了访问https网站&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;opkg update &amp;amp;&amp;amp; opkg install curl ca-bundle&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Openwrtcurl.png|border]]&lt;br /&gt;
&lt;br /&gt;
curl 8.12.1有这样的版本号 有IPv6 有ssl 确保有他们就可以啦&lt;br /&gt;
&lt;br /&gt;
===== 检查 获取ip 的url是否有效 =====&lt;br /&gt;
在使用前先在ssh里面输入&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;curl -s --max-time 5 &amp;lt;nowiki&amp;gt;https://ifconfig.me&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;  进行测试&lt;br /&gt;
&lt;br /&gt;
[[File:Curltestgetmyip.png|border]]&lt;br /&gt;
&lt;br /&gt;
看看能不能获取ip地址 红色方块里面的就是ip地址 如果不能….&lt;br /&gt;
&lt;br /&gt;
在后续的代码块中修改这两个=后面的内容 &lt;br /&gt;
&lt;br /&gt;
CHECK_URL_V4=&amp;quot;&amp;lt;nowiki&amp;gt;https://ifconfig.me&amp;lt;/nowiki&amp;gt;&amp;quot; &lt;br /&gt;
&lt;br /&gt;
改成&lt;br /&gt;
&lt;br /&gt;
CHECK_URL_V4=”&amp;lt;nowiki&amp;gt;https://ident.me”&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
CHECK_URL_V6=&amp;quot;&amp;lt;nowiki&amp;gt;https://ifconfig.me&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
改成&lt;br /&gt;
&lt;br /&gt;
CHECK_URL_V6=” &amp;lt;nowiki&amp;gt;http://v6.ipip.net”&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 开始 ====&lt;br /&gt;
在 OpenWrt 中，每当接口（WAN）状态发生变化（比如重连、获取到新 IP、掉线）时，系统会自动触发对应的脚本。 OpenWrt 的网络热插拔脚本存放在： &amp;lt;code&amp;gt;/etc/hotplug.d/iface/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;进入目录：&amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;cd /etc/hotplug.d/iface/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Openwrtcd.png|border]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;创建脚本：&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
修改下面代码 你可以先复制到记事本或者别的文本编辑工具里面 最前面的&lt;br /&gt;
&lt;br /&gt;
export VEID=&amp;quot;你的VEID&amp;quot; export API_KEY=&amp;quot;你的API_KEY&amp;quot;&lt;br /&gt;
&lt;br /&gt;
改成类似这样的格式&lt;br /&gt;
&lt;br /&gt;
export VEID=&amp;quot;10202&amp;quot; export API_KEY=&amp;quot;private_xxxxx&amp;quot;&lt;br /&gt;
&lt;br /&gt;
请根据你实际的veid和API_Key修改&lt;br /&gt;
&lt;br /&gt;
这两个如果你知道干嘛的也可以改 CACHE_FILE=&amp;quot;/etc/config/vps_last_ip&amp;quot;  保存上传的ip防止重复调用API LOG_FILE=&amp;quot;/tmp/vps_sync_error.log&amp;quot;  把执行过程和结果保存到这个文件里&lt;br /&gt;
&lt;br /&gt;
最后要检查的 输入 &amp;lt;code&amp;gt;ls /etc/hotplug.d/iface/99-sync-vps-firewall&amp;lt;/code&amp;gt;  检查一下 有没有同名的其他脚本&lt;br /&gt;
&lt;br /&gt;
下图就是没有 就不需要修改&lt;br /&gt;
&lt;br /&gt;
[[File:Testfileis.png|border]]&lt;br /&gt;
&lt;br /&gt;
下图就是有 那么你就要换一个名字&lt;br /&gt;
&lt;br /&gt;
/etc/hotplug.d/iface/99-这里改成你想要的名字 &lt;br /&gt;
&lt;br /&gt;
比如 /etc/hotplug.d/iface/99-sync-vps-firewall1&lt;br /&gt;
&lt;br /&gt;
[[File:Testfileno.png|border]]&lt;br /&gt;
&lt;br /&gt;
修改后…复制粘贴到ssh里面 回车就创建好脚本了&lt;br /&gt;
&lt;br /&gt;
代码块如下:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; &amp;#039;EOF&amp;#039; &amp;gt; /etc/hotplug.d/iface/99-sync-vps-firewall&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
# 只要是接口启动(ifup)就触发&lt;br /&gt;
[ &amp;quot;$ACTION&amp;quot; = &amp;quot;ifup&amp;quot; ] || exit 0&lt;br /&gt;
&lt;br /&gt;
# --- 用户配置区 ---&lt;br /&gt;
export VEID=&amp;quot;你的VEID&amp;quot;&lt;br /&gt;
export API_KEY=&amp;quot;你的API_KEY&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 用户可以分别设置获取地址（可以相同，也可以不同）&lt;br /&gt;
CHECK_URL_V4=&amp;quot;https://ifconfig.me&amp;quot;&lt;br /&gt;
CHECK_URL_V6=&amp;quot;https://ifconfig.me&amp;quot;&lt;br /&gt;
&lt;br /&gt;
V6_MASK=&amp;quot;/64&amp;quot;  # IPv6 掩码&lt;br /&gt;
CACHE_FILE=&amp;quot;/etc/config/vps_last_ip&amp;quot;&lt;br /&gt;
LOG_FILE=&amp;quot;/tmp/vps_sync.log&amp;quot;&lt;br /&gt;
MAX_LINES=100&lt;br /&gt;
&lt;br /&gt;
# --- 文件初始化与清理函数 ---&lt;br /&gt;
init_files() {&lt;br /&gt;
    sleep 10&lt;br /&gt;
    # 1. 处理日志文件&lt;br /&gt;
    if [ ! -f &amp;quot;$LOG_FILE&amp;quot; ]; then&lt;br /&gt;
        touch &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
        chmod 644 &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
        echo &amp;quot;$(date): [系统] 初始日志文件已创建&amp;quot; &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        # 日志滚动清理逻辑&lt;br /&gt;
        local current_lines=$(wc -l &amp;lt; &amp;quot;$LOG_FILE&amp;quot;)&lt;br /&gt;
        if [ &amp;quot;$current_lines&amp;quot; -gt &amp;quot;$MAX_LINES&amp;quot; ]; then&lt;br /&gt;
            echo &amp;quot;$(tail -n 50 &amp;quot;$LOG_FILE&amp;quot;)&amp;quot; &amp;gt; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
            echo &amp;quot;$(date): [系统] 日志滚动清理完成&amp;quot; &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
        fi&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # 2. 处理缓存文件及其目录&lt;br /&gt;
    local cache_dir=$(dirname &amp;quot;$CACHE_FILE&amp;quot;)&lt;br /&gt;
    if [ ! -d &amp;quot;$cache_dir&amp;quot; ]; then&lt;br /&gt;
        mkdir -p &amp;quot;$cache_dir&amp;quot;&lt;br /&gt;
        echo &amp;quot;$(date): [系统] 创建缓存目录: $cache_dir&amp;quot; &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    if [ ! -f &amp;quot;$CACHE_FILE&amp;quot; ]; then&lt;br /&gt;
        touch &amp;quot;$CACHE_FILE&amp;quot;&lt;br /&gt;
        # 初始化空变量，防止脚本第一次读取时报错&lt;br /&gt;
        echo &amp;quot;LAST_IP4=\&amp;quot;\&amp;quot;&amp;quot; &amp;gt; &amp;quot;$CACHE_FILE&amp;quot;&lt;br /&gt;
        echo &amp;quot;LAST_IP6=\&amp;quot;\&amp;quot;&amp;quot; &amp;gt;&amp;gt; &amp;quot;$CACHE_FILE&amp;quot;&lt;br /&gt;
        echo &amp;quot;$(date): [系统] 初始缓存文件已创建&amp;quot; &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# --- IPv4 暴力获取函数 ---&lt;br /&gt;
get_v4() {&lt;br /&gt;
    local count=0&lt;br /&gt;
    while [ $count -lt 10 ]; do&lt;br /&gt;
        local res=$(curl -s --max-time 5 &amp;quot;$CHECK_URL_V4&amp;quot; 2&amp;gt;/dev/null)&lt;br /&gt;
        if echo &amp;quot;$res&amp;quot; | grep -Eq &amp;quot;^([0-9]{1,3}\.){3}[0-9]{1,3}$&amp;quot;; then&lt;br /&gt;
            echo &amp;quot;$res&amp;quot; &amp;amp;&amp;amp; return 0&lt;br /&gt;
        fi&lt;br /&gt;
        count=$((count + 1))&lt;br /&gt;
        sleep 2&lt;br /&gt;
    done&lt;br /&gt;
    return 1&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# --- IPv6 暴力获取函数 ---&lt;br /&gt;
get_v6() {&lt;br /&gt;
    local count=0&lt;br /&gt;
    while [ $count -lt 10 ]; do&lt;br /&gt;
        local res=$(curl -s --max-time 5 &amp;quot;$CHECK_URL_V6&amp;quot; 2&amp;gt;/dev/null)&lt;br /&gt;
        if echo &amp;quot;$res&amp;quot; | grep -q &amp;quot;:&amp;quot;; then&lt;br /&gt;
	          echo &amp;quot;${res}${V6_MASK}&amp;quot;&lt;br /&gt;
            return 0&lt;br /&gt;
        fi&lt;br /&gt;
        count=$((count + 1))&lt;br /&gt;
        sleep 1&lt;br /&gt;
    done&lt;br /&gt;
    &lt;br /&gt;
    ip6=$(ip -6 addr show scope global | grep inet6 | awk &amp;#039;{print $2}&amp;#039; | cut -d/ -f1 | grep -E &amp;#039;^(2|3)&amp;#039; | head -n 1)&lt;br /&gt;
    if [ -n &amp;quot;$ip6&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;${ip6}${V6_MASK}&amp;quot;&lt;br /&gt;
        return 0&lt;br /&gt;
    fi&lt;br /&gt;
    return 1&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# 1. 初始化&lt;br /&gt;
init_files&lt;br /&gt;
&lt;br /&gt;
# 2. 执行双栈并行/独立获取&lt;br /&gt;
CURRENT_IP4=$(get_v4)&lt;br /&gt;
CURRENT_IP6=$(get_v6)&lt;br /&gt;
&lt;br /&gt;
# 3. 基础校验：至少得有一个 IP 吧&lt;br /&gt;
if [ -z &amp;quot;$CURRENT_IP4&amp;quot; ] &amp;amp;&amp;amp; [ -z &amp;quot;$CURRENT_IP6&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;$(date): [错误] 尝试10次后仍无法获取到任何有效IP&amp;quot; &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 4. 缓存对比 (防重复刷 API)&lt;br /&gt;
[ -f &amp;quot;$CACHE_FILE&amp;quot; ] &amp;amp;&amp;amp; . &amp;quot;$CACHE_FILE&amp;quot;&lt;br /&gt;
if [ &amp;quot;$CURRENT_IP4&amp;quot; = &amp;quot;$LAST_IP4&amp;quot; ] &amp;amp;&amp;amp; [ &amp;quot;$CURRENT_IP6&amp;quot; = &amp;quot;$LAST_IP6&amp;quot; ]; then&lt;br /&gt;
    exit 0&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# 5. 调用 API&lt;br /&gt;
CMD=&amp;quot;bash /root/update_fw.sh $CURRENT_IP4 $CURRENT_IP6&amp;quot;&lt;br /&gt;
RESPONSE_FULL=$(curl -s -w &amp;quot;%{http_code}&amp;quot; -X POST \&lt;br /&gt;
    --data &amp;quot;veid=${VEID}&amp;amp;api_key=${API_KEY}&amp;quot; \&lt;br /&gt;
    --data-urlencode &amp;quot;command=${CMD}&amp;quot; \&lt;br /&gt;
    &amp;quot;https://api.64clouds.com/v1/basicShell/exec&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# 6. 解析结果&lt;br /&gt;
HTTP_CODE=&amp;quot;${RESPONSE_FULL:${#RESPONSE_FULL}-3}&amp;quot;&lt;br /&gt;
RESPONSE_JSON=&amp;quot;${RESPONSE_FULL:0:${#RESPONSE_FULL}-3}&amp;quot;&lt;br /&gt;
RESPONSE_CLEAN=$(echo &amp;quot;$RESPONSE_JSON&amp;quot; | tr -d &amp;#039;\n\r &amp;#039;)&lt;br /&gt;
ERROR_CODE=$(echo &amp;quot;$RESPONSE_CLEAN&amp;quot; | grep -o &amp;#039;&amp;quot;error&amp;quot;:[0-9]*&amp;#039; | cut -d: -f2)&lt;br /&gt;
MESSAGE=$(echo &amp;quot;$RESPONSE_CLEAN&amp;quot; | grep -o &amp;#039;&amp;quot;message&amp;quot;:&amp;quot;[^&amp;quot;]*&amp;quot;&amp;#039; | sed &amp;#039;s/&amp;quot;message&amp;quot;:&amp;quot;//;s/&amp;quot;$//&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
# 7. 写入中文日志&lt;br /&gt;
if [ &amp;quot;$HTTP_CODE&amp;quot; = &amp;quot;200&amp;quot; ] &amp;amp;&amp;amp; [ &amp;quot;$ERROR_CODE&amp;quot; = &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;LAST_IP4=\&amp;quot;$CURRENT_IP4\&amp;quot;&amp;quot; &amp;gt; &amp;quot;$CACHE_FILE&amp;quot;&lt;br /&gt;
    echo &amp;quot;LAST_IP6=\&amp;quot;$CURRENT_IP6\&amp;quot;&amp;quot; &amp;gt;&amp;gt; &amp;quot;$CACHE_FILE&amp;quot;&lt;br /&gt;
    echo &amp;quot;$(date): [成功] IP变更同步成功。IPv4: $CURRENT_IP4, IPv6: $CURRENT_IP6. VPS反馈: $MESSAGE&amp;quot; &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
    echo &amp;quot;同步成功: $MESSAGE&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
    [ -z &amp;quot;$MESSAGE&amp;quot; ] &amp;amp;&amp;amp; MESSAGE=&amp;quot;请求异常: $RESPONSE_JSON&amp;quot;&lt;br /&gt;
    echo &amp;quot;$(date): [失败] 同步失败。详细原因: $MESSAGE&amp;quot; &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
    echo &amp;quot;同步失败: $MESSAGE&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;[[File:Catcmd1.png|border]]就像这样粘贴后回车就行&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
输入&amp;lt;code&amp;gt;chmod 755 /etc/hotplug.d/iface/99-sync-vps-firewall&amp;lt;/code&amp;gt;赋予执行权限 &lt;br /&gt;
&lt;br /&gt;
输入 &amp;lt;code&amp;gt;ls -l /etc/hotplug.d/iface/99-sync-vps-firewall&amp;lt;/code&amp;gt;  查看赋予权限是否成功&lt;br /&gt;
&lt;br /&gt;
[[File:Openwrtisok.png|border]]这样你可以重启 试试看… 可以输入&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cat /tmp/vps_sync_error.log&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
查看是否成功&lt;br /&gt;
&lt;br /&gt;
[[File:Openwrtlastok.png|border]]&lt;br /&gt;
&lt;br /&gt;
前面的蓝色框框说成功指的是API成功了 里面的ip是本地上传给服务器更新的ip 后面红色框框 OK才是防火墙成功的意思 后面的ip就是更新的ip 如果有一个ip无效或者…就不会显示了&lt;br /&gt;
&lt;br /&gt;
==== 常见错误 [[File:Openwrterror.png|border]] ====&lt;br /&gt;
身份验证失败  意思就是说 veid 或者 api_key 的内容错误&lt;br /&gt;
&lt;br /&gt;
[[File:Openwrterror1.png|border]]&lt;br /&gt;
&lt;br /&gt;
没有找到链 &lt;br /&gt;
&lt;br /&gt;
你可以看到 蓝色框的是防火墙指令..红色框是表 &lt;br /&gt;
&lt;br /&gt;
可能是 表(inet my_firewall) 或者 链(allowed_ip) 的名字和服务器防火墙的对不上 你可以去服务器&amp;lt;code&amp;gt;nft list ruleset&amp;lt;/code&amp;gt;看一下&lt;br /&gt;
&lt;br /&gt;
==== 华硕路由器 官方固件 ====&lt;br /&gt;
因为官方固件没有提供 重新连接网络 后执行脚本的功能 所以我们需要一台本地的Linux服务器了(不是防火墙所在的那个服务器哦)…&lt;br /&gt;
&lt;br /&gt;
===== 查看Linux服务器的ip (本地的局域网内的) =====&lt;br /&gt;
ssh连接的那个ip就是了…&lt;br /&gt;
&lt;br /&gt;
如果你忘记了 输入 &amp;lt;code&amp;gt;ip addr&amp;lt;/code&amp;gt; 找个eth0或者 ens18 这样 一般都是默认网络接口 里面的ip地址 蓝色框框&lt;br /&gt;
&lt;br /&gt;
[[File:Seeserverip.png|border]]&lt;br /&gt;
&lt;br /&gt;
===== 借助监听远程日志触发API更新防火墙白名单IP =====&lt;br /&gt;
用浏览器登陆你的路由器后台 输入用户名和密码 一般的地址是 192.168.1.1 如果不是可以打开 &amp;lt;nowiki&amp;gt;http://www.asusrouter.com/&amp;lt;/nowiki&amp;gt; 试试&lt;br /&gt;
&lt;br /&gt;
[[File:Loginrouter.png|border]]&lt;br /&gt;
找到系统记录 单击&lt;br /&gt;
&lt;br /&gt;
[[File:Syslog.png|border]]&lt;br /&gt;
&lt;br /&gt;
[[File:Logre.png|border]]&lt;br /&gt;
&lt;br /&gt;
远程记录服务器 输入 你的 本地局域网linux服务器的ip &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
远程记录服务器端口 默认514 &amp;#039;&amp;#039;&amp;#039;如果你的linux服务器占用&amp;#039;&amp;#039;&amp;#039;514的话 就改一下&lt;br /&gt;
&lt;br /&gt;
====== 如何查看是否占用 ======&lt;br /&gt;
ssh连接那台服务器&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;切换root账户&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* 输入命令：&amp;lt;code&amp;gt;su -&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;(注意：su 后面有个空格和减号，这很重要，代表同时切换环境变量)&amp;#039;&amp;#039;&lt;br /&gt;
* 输入 Root 密码（输入时看不见）。&lt;br /&gt;
* 此时你的提示符会变成 &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt;，代表你又是 Root 了。&lt;br /&gt;
&lt;br /&gt;
[[File:Su-.png|border]]&lt;br /&gt;
输入 &amp;lt;code&amp;gt;sudo ss -tunlp | grep :514&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如果你没有安装sudo就会提示&lt;br /&gt;
&lt;br /&gt;
[[File:Errorsudo.png|border]]&lt;br /&gt;
&lt;br /&gt;
那就不需要输入sudo 了 直接 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ss -tunlp | grep :514&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Ss.png|border]]&lt;br /&gt;
&lt;br /&gt;
这样有输出 就是被占用了 占用的话换一个就行了&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
这样没有输出 就是没占用&lt;br /&gt;
&lt;br /&gt;
[[File:Noss.png|border]]&lt;br /&gt;
&lt;br /&gt;
然后点击 应用本页面设置&lt;br /&gt;
&lt;br /&gt;
===== 另外一台Linux服务器部分 不是防火墙所在的那个服务器哦 =====&lt;br /&gt;
ssh连接后&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;切换到root账户&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* 输入命令：&amp;lt;code&amp;gt;su -&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;(注意：su 后面有个空格和减号，这很重要，代表同时切换环境变量)&amp;#039;&amp;#039;&lt;br /&gt;
* 输入 Root 密码（输入时看不见）。&lt;br /&gt;
* 此时你的提示符会变成 &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt;，代表你又是 Root 了。&lt;br /&gt;
&lt;br /&gt;
[[File:Su-.png|border]]&lt;br /&gt;
&lt;br /&gt;
====== 安装socat ======&lt;br /&gt;
socat的功能很强大 是一个多功能的网络工具 我们这里用于接收路由器发过来的日志…&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Debian / Ubuntu / PVE / Armbian 系：&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;apt update &amp;amp;&amp;amp; apt install socat -y&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Red Hat / CentOS / Rocky Linux 系：&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;yum install socat -y&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
新一些Red Hat/CentOS/Rocky Linux希的系统可以使用&amp;lt;code&amp;gt;dnf install socat -y&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
安装后 输入 &amp;lt;code&amp;gt;socat -V&amp;lt;/code&amp;gt; 确认安装成功&lt;br /&gt;
&lt;br /&gt;
[[File:Socatok.png|border]]&lt;br /&gt;
&lt;br /&gt;
====== 检查 获取ip 的url是否有效 ======&lt;br /&gt;
在使用前先在ssh里面输入&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;curl -s --max-time 5 &amp;lt;nowiki&amp;gt;https://ifconfig.me&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;  进行测试&lt;br /&gt;
&lt;br /&gt;
[[File:Curltestgetmyip.png|border]]&lt;br /&gt;
&lt;br /&gt;
看看能不能获取ip地址 红色方块里面的就是ip地址 如果不能….&lt;br /&gt;
&lt;br /&gt;
在代码块中修改这两个=后面的内容 &lt;br /&gt;
&lt;br /&gt;
CHECK_URL_V4=&amp;quot;&amp;lt;nowiki&amp;gt;https://ifconfig.me&amp;lt;/nowiki&amp;gt;&amp;quot; &lt;br /&gt;
&lt;br /&gt;
改成&lt;br /&gt;
&lt;br /&gt;
CHECK_URL_V4=”&amp;lt;nowiki&amp;gt;https://ident.me”&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
CHECK_URL_V6=&amp;quot;&amp;lt;nowiki&amp;gt;https://ifconfig.me&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
改成&lt;br /&gt;
&lt;br /&gt;
CHECK_URL_V6=” &amp;lt;nowiki&amp;gt;http://v6.ipip.net”&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====== 创建脚本 ======&lt;br /&gt;
修改下面代码块 的代码 你可以复制到记事本或者其他文本编辑器里面 修改&lt;br /&gt;
&lt;br /&gt;
最前面的&lt;br /&gt;
&lt;br /&gt;
export VEID=&amp;quot;你的VEID&amp;quot; export API_KEY=&amp;quot;你的API_KEY&amp;quot;&lt;br /&gt;
&lt;br /&gt;
改成类似这样的格式&lt;br /&gt;
&lt;br /&gt;
export VEID=&amp;quot;10202&amp;quot; export API_KEY=&amp;quot;private_xxxxx&amp;quot;&lt;br /&gt;
&lt;br /&gt;
请根据你实际的veid和API_Key修改&lt;br /&gt;
&lt;br /&gt;
这两个如果你知道干嘛的也可以改 CACHE_FILE=&amp;quot;/etc/config/vps_last_ip&amp;quot;  保存上传的ip防止重复调用API LOG_FILE=&amp;quot;/tmp/vps_sync_error.log&amp;quot;  把执行过程和结果保存到这个文件里&lt;br /&gt;
&lt;br /&gt;
根据刚才测试的结果来决定要不要替换&lt;br /&gt;
&lt;br /&gt;
CHECK_URL_V4=&amp;quot;&amp;lt;nowiki&amp;gt;https://ifconfig.me&amp;lt;/nowiki&amp;gt;&amp;quot; CHECK_URL_V6=&amp;quot;&amp;lt;nowiki&amp;gt;https://ifconfig.me&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
V6_MASK=&amp;quot;/64&amp;quot;   也可以修改 详情看上方的 &amp;#039;&amp;#039;&amp;#039;ipv6的网段 V6_MASK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
最后要检查的 输入 &amp;lt;code&amp;gt;ls /root/checkip.sh&amp;lt;/code&amp;gt;  检查一下 有没有同名的其他脚本&lt;br /&gt;
&lt;br /&gt;
下图就是没有 就不需要修改&lt;br /&gt;
&lt;br /&gt;
[[File:Nocheckip.png|border]]&lt;br /&gt;
&lt;br /&gt;
下图这样就是有 就需要修改/root/checkip.sh 比如修改成 /root/checkip1.sh&lt;br /&gt;
&lt;br /&gt;
[[File:Havecheckip.png|border]]&lt;br /&gt;
&lt;br /&gt;
修改后&lt;br /&gt;
&lt;br /&gt;
全部选择 复制粘贴 到ssh里面 按回车&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
代码块:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; &amp;#039;EOF&amp;#039; &amp;gt; /root/checkip.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# --- 用户配置区 ---&lt;br /&gt;
export VEID=&amp;quot;你的VEID&amp;quot;&lt;br /&gt;
export API_KEY=&amp;quot;你的API_KEY&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 获取 IP 的地址&lt;br /&gt;
CHECK_URL_V4=&amp;quot;https://ifconfig.me&amp;quot;&lt;br /&gt;
CHECK_URL_V6=&amp;quot;https://ifconfig.me&amp;quot;&lt;br /&gt;
&lt;br /&gt;
V6_MASK=&amp;quot;/64&amp;quot;  # IPv6 掩码&lt;br /&gt;
CACHE_FILE=&amp;quot;/etc/config/vps_last_ip&amp;quot;&lt;br /&gt;
LOG_FILE=&amp;quot;/var/log/vps_sync.log&amp;quot;&lt;br /&gt;
MAX_LINES=100  # 日志保留行数&lt;br /&gt;
&lt;br /&gt;
# --- 1. 初始化文件与目录 ---&lt;br /&gt;
init_files() {&lt;br /&gt;
    # 处理日志文件&lt;br /&gt;
    if [ ! -f &amp;quot;$LOG_FILE&amp;quot; ]; then&lt;br /&gt;
        touch &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
        chmod 644 &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        # 日志滚动清理&lt;br /&gt;
        local current_lines=$(wc -l &amp;lt; &amp;quot;$LOG_FILE&amp;quot;)&lt;br /&gt;
        if [ &amp;quot;$current_lines&amp;quot; -gt &amp;quot;$MAX_LINES&amp;quot; ]; then&lt;br /&gt;
            echo &amp;quot;$(tail -n 100 &amp;quot;$LOG_FILE&amp;quot;)&amp;quot; &amp;gt; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
            echo &amp;quot;$(date): [系统] 日志滚动清理完成 (保留末尾100行)&amp;quot; &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
        fi&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # 处理缓存目录及文件&lt;br /&gt;
    local cache_dir=$(dirname &amp;quot;$CACHE_FILE&amp;quot;)&lt;br /&gt;
    [ ! -d &amp;quot;$cache_dir&amp;quot; ] &amp;amp;&amp;amp; mkdir -p &amp;quot;$cache_dir&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    if [ ! -f &amp;quot;$CACHE_FILE&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;LAST_IP4=\&amp;quot;\&amp;quot;&amp;quot; &amp;gt; &amp;quot;$CACHE_FILE&amp;quot;&lt;br /&gt;
        echo &amp;quot;LAST_IP6=\&amp;quot;\&amp;quot;&amp;quot; &amp;gt;&amp;gt; &amp;quot;$CACHE_FILE&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# --- 2. IPv4 暴力获取函数 ---&lt;br /&gt;
get_v4() {&lt;br /&gt;
    local count=0&lt;br /&gt;
    while [ $count -lt 10 ]; do&lt;br /&gt;
        local res=$(curl -s4 --max-time 5 &amp;quot;$CHECK_URL_V4&amp;quot; 2&amp;gt;/dev/null)&lt;br /&gt;
        if echo &amp;quot;$res&amp;quot; | grep -Eq &amp;quot;^([0-9]{1,3}\.){3}[0-9]{1,3}$&amp;quot;; then&lt;br /&gt;
            echo &amp;quot;$res&amp;quot; &amp;amp;&amp;amp; return 0&lt;br /&gt;
        fi&lt;br /&gt;
        count=$((count + 1))&lt;br /&gt;
        sleep 2&lt;br /&gt;
    done&lt;br /&gt;
    return 1&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# --- 3. IPv6 暴力获取函数 ---&lt;br /&gt;
get_v6() {&lt;br /&gt;
    local count=0&lt;br /&gt;
    while [ $count -lt 10 ]; do&lt;br /&gt;
        local res=$(curl -s6 --max-time 5 &amp;quot;$CHECK_URL_V6&amp;quot; 2&amp;gt;/dev/null)&lt;br /&gt;
        if echo &amp;quot;$res&amp;quot; | grep -q &amp;quot;:&amp;quot;; then&lt;br /&gt;
            echo &amp;quot;${res}${V6_MASK}&amp;quot;&lt;br /&gt;
            return 0&lt;br /&gt;
        fi&lt;br /&gt;
        count=$((count + 1))&lt;br /&gt;
        sleep 4&lt;br /&gt;
    done&lt;br /&gt;
    &lt;br /&gt;
    ip6=$(ip -6 addr show scope global | grep inet6 | awk &amp;#039;{print $2}&amp;#039; | cut -d/ -f1 | grep -E &amp;#039;^(2|3)&amp;#039; | head -n 1)&lt;br /&gt;
    if [ -n &amp;quot;$ip6&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;${ip6}${V6_MASK}&amp;quot;&lt;br /&gt;
        return 0&lt;br /&gt;
    fi&lt;br /&gt;
    &lt;br /&gt;
    return 1&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# --- 4. 核心同步逻辑 ---&lt;br /&gt;
sync_ip() {&lt;br /&gt;
&lt;br /&gt;
    # 刚收到日志时，给网络层 5-10 秒的初始化时间&lt;br /&gt;
    sleep 10&lt;br /&gt;
    &lt;br /&gt;
    # 获取当前 IP&lt;br /&gt;
    CURRENT_IP4=$(get_v4)&lt;br /&gt;
    CURRENT_IP6=$(get_v6)&lt;br /&gt;
&lt;br /&gt;
    # 基础校验&lt;br /&gt;
    if [ -z &amp;quot;$CURRENT_IP4&amp;quot; ] &amp;amp;&amp;amp; [ -z &amp;quot;$CURRENT_IP6&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;$(date): [错误] 尝试10次后仍无法获取到任何有效IP&amp;quot; &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
        return 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # 读取缓存并对比&lt;br /&gt;
    . &amp;quot;$CACHE_FILE&amp;quot;&lt;br /&gt;
    if [ &amp;quot;$CURRENT_IP4&amp;quot; = &amp;quot;$LAST_IP4&amp;quot; ] &amp;amp;&amp;amp; [ &amp;quot;$CURRENT_IP6&amp;quot; = &amp;quot;$LAST_IP6&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;$(date): [跳过] IP 未发生变化，取消同步&amp;quot; &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
        return 0&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    # 调用 API&lt;br /&gt;
    CMD=&amp;quot;bash /root/update_fw.sh $CURRENT_IP4 $CURRENT_IP6&amp;quot;&lt;br /&gt;
    local RESPONSE_FULL=$(curl -s -w &amp;quot;%{http_code}&amp;quot; -X POST \&lt;br /&gt;
        --data &amp;quot;veid=${VEID}&amp;amp;api_key=${API_KEY}&amp;quot; \&lt;br /&gt;
        --data-urlencode &amp;quot;command=${CMD}&amp;quot; \&lt;br /&gt;
        &amp;quot;https://api.64clouds.com/v1/basicShell/exec&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # 解析结果&lt;br /&gt;
    local HTTP_CODE=&amp;quot;${RESPONSE_FULL:${#RESPONSE_FULL}-3}&amp;quot;&lt;br /&gt;
    local RESPONSE_JSON=&amp;quot;${RESPONSE_FULL:0:${#RESPONSE_FULL}-3}&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # 核心解析：压缩 JSON 并提取字段&lt;br /&gt;
    local CLEAN_JSON=$(echo &amp;quot;$RESPONSE_JSON&amp;quot; | tr -d &amp;#039;\n\r&amp;#039; | tr -s &amp;#039; &amp;#039;)&lt;br /&gt;
    local ERROR_CODE=$(echo &amp;quot;$CLEAN_JSON&amp;quot; | sed -n &amp;#039;s/.*&amp;quot;error&amp;quot;:[ ]*\([0-9]*\).*/\1/p&amp;#039;)&lt;br /&gt;
    local MESSAGE=$(echo &amp;quot;$CLEAN_JSON&amp;quot; | sed -n &amp;#039;s/.*&amp;quot;message&amp;quot;:[ ]*&amp;quot;\(.*\)&amp;quot;[ ]*}.*/\1/p&amp;#039; | sed &amp;#039;s/\\//g&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
    # 写入日志&lt;br /&gt;
    if [ &amp;quot;$HTTP_CODE&amp;quot; = &amp;quot;200&amp;quot; ] &amp;amp;&amp;amp; [ &amp;quot;$ERROR_CODE&amp;quot; = &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;LAST_IP4=\&amp;quot;$CURRENT_IP4\&amp;quot;&amp;quot; &amp;gt; &amp;quot;$CACHE_FILE&amp;quot;&lt;br /&gt;
        echo &amp;quot;LAST_IP6=\&amp;quot;$CURRENT_IP6\&amp;quot;&amp;quot; &amp;gt;&amp;gt; &amp;quot;$CACHE_FILE&amp;quot;&lt;br /&gt;
        echo &amp;quot;$(date): [成功] 同步成功。IPv4: $CURRENT_IP4, IPv6: $CURRENT_IP6. VPS反馈: $MESSAGE&amp;quot; &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        [ -z &amp;quot;$MESSAGE&amp;quot; ] &amp;amp;&amp;amp; MESSAGE=&amp;quot;$CLEAN_JSON&amp;quot;&lt;br /&gt;
        echo &amp;quot;$(date): [失败] 同步失败。HTTP: $HTTP_CODE, ERROR: $ERROR_CODE, 原因: $MESSAGE&amp;quot; &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# --- 5. 监听入口 ---&lt;br /&gt;
init_files&lt;br /&gt;
&lt;br /&gt;
# 如果直接运行脚本（无管道输入），执行一次同步&lt;br /&gt;
if [ -t 0 ]; then&lt;br /&gt;
    sync_ip&lt;br /&gt;
else&lt;br /&gt;
    # 如果有管道输入（来自 socat），则监听日志触发&lt;br /&gt;
    while IFS= read -r line; do&lt;br /&gt;
        if echo &amp;quot;$line&amp;quot; | grep -qi &amp;#039;local *IP address&amp;#039;; then&lt;br /&gt;
            echo &amp;quot;$(date): [触发] 检测到路由器拨号日志&amp;quot; &amp;gt;&amp;gt; &amp;quot;$LOG_FILE&amp;quot;&lt;br /&gt;
            sync_ip&lt;br /&gt;
        fi&lt;br /&gt;
    done&lt;br /&gt;
fi&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;[[File:Cathuashuo.png|border]]&lt;br /&gt;
&lt;br /&gt;
粘贴之后有点混乱 不用管 直接回车就行了&lt;br /&gt;
&lt;br /&gt;
然后&lt;br /&gt;
&lt;br /&gt;
检查一下 输入  &amp;lt;code&amp;gt;cat /root/checkip.sh&amp;lt;/code&amp;gt;  有内容就好了&lt;br /&gt;
&lt;br /&gt;
[[File:Catcheckip.png|border]]&lt;br /&gt;
&lt;br /&gt;
授予运行权限 &amp;lt;code&amp;gt;chmod +x /root/checkip.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
然后输入 &amp;lt;code&amp;gt;ls -l /root/checkip.sh&amp;lt;/code&amp;gt;  查看多了三个x 就对了 如果像红色框框没有x 就不对 请重试 &amp;lt;code&amp;gt;chmod +x /root/checkip.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Lslcheckip.png|border]]&lt;br /&gt;
&lt;br /&gt;
然后你就可以输入&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/root/checkip.sh&amp;lt;/code&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
如果第一次测试成功了 以后想测试的话运行这个 &amp;lt;code&amp;gt;rm /etc/config/vps_last_ip &amp;amp;&amp;amp; /root/checkip.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
需要&amp;lt;code&amp;gt;rm /etc/config/vps_last_ip&amp;lt;/code&amp;gt;删除本地保留的ip记录 就是说如果这个ip记录和获取到的一样是不会运行api执行脚本的&lt;br /&gt;
&lt;br /&gt;
测试一下 相当于是手动更新..不是自动更新&lt;br /&gt;
&lt;br /&gt;
[[File:Testcheckip.png|border]]&lt;br /&gt;
&lt;br /&gt;
不会有内容输出&lt;br /&gt;
&lt;br /&gt;
需要查看日志 &amp;lt;code&amp;gt;cat /var/log/vps_sync.log&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如果是下图那样就是成功了 要看红色的 红色框是vps服务器返回的OK 就是真的成功了 Allowed:后面是成功添加的ip 一个是ipv4 一个是ipv6的&lt;br /&gt;
&lt;br /&gt;
蓝色框的成功说的是API使用成功 提交的IP是哪些&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
在此再次提醒您 使用时 保管好Veid和API_Key 你 看我打码服务器名字 然而还是在这里漏了...以前的打码就没意义了&lt;br /&gt;
&lt;br /&gt;
[[File:Checkipok.png|border]]&lt;br /&gt;
&lt;br /&gt;
====== 常见错误 ======&lt;br /&gt;
[[File:Errorapi.png|border]]&lt;br /&gt;
&lt;br /&gt;
身份验证错误 一般代表 api_key 或 veid 的内容填写错误 就是= 后面的 &amp;quot;&amp;quot; 里面的内容 比如VEID=&amp;quot;就这里错了&amp;quot; API_KEY=&amp;quot;这里&amp;quot;&lt;br /&gt;
&lt;br /&gt;
====== 配置开机启动 和 自动更新 ======&lt;br /&gt;
使用systemctl配置开机启动和 自动根据日志更新&lt;br /&gt;
&lt;br /&gt;
修改以下代码中的&lt;br /&gt;
&lt;br /&gt;
UDP-RECV:514 把514换成你的路由器那里设置的 远程记录服务器端口 比如 515 就改成 UDP-RECV:515&lt;br /&gt;
&lt;br /&gt;
[[File:Logre.png|border]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ExecStart=/bin/sh -c &amp;quot;/usr/bin/socat -u UDP-RECV:514 STDOUT | /root/checkip.sh&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
这里面的 &amp;lt;code&amp;gt;/root/checkip.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如果你的文件名改了的话 就需要修改… 没改就不用改..&lt;br /&gt;
&lt;br /&gt;
修改好 全部选择 复制粘贴到ssh里面 然后按回车&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; &amp;#039;EOF&amp;#039; &amp;gt; /etc/systemd/system/router-log-watcher.service&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Router Log Watcher&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
# 管道命令：socat 接收 UDP 514，然后传给脚本&lt;br /&gt;
ExecStart=/bin/bash -c &amp;quot;/usr/bin/socat -u UDP-RECV:514 STDOUT | /root/checkip.sh&amp;quot;&lt;br /&gt;
Restart=always&lt;br /&gt;
RestartSec=5&lt;br /&gt;
# 如果脚本需要 root 权限，确保 User=root&lt;br /&gt;
User=root&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;这个不怎么混乱 直接回车就行&lt;br /&gt;
&lt;br /&gt;
然后 &amp;lt;code&amp;gt;cat /etc/systemd/system/router-log-watcher.service&amp;lt;/code&amp;gt; 如果你的文件名字 如果不是这个的话请修改&lt;br /&gt;
&lt;br /&gt;
[[File:Catsystemctl.png|border]]&lt;br /&gt;
&lt;br /&gt;
输入这个  意思是识别新服务&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;systemctl daemon-reload&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
在输入这个 意思是 启动并设置开机自启&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;systemctl enable --now router-log-watcher.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Startsystemctl.png|border]]&lt;br /&gt;
&lt;br /&gt;
最后输入&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;systemctl status router-log-watcher.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Staratok.png|border]]&lt;br /&gt;
&lt;br /&gt;
蓝色的框 是 已经运行了 绿色的是enabled 是 设置了 开机自动启动&lt;br /&gt;
&lt;br /&gt;
现在可以重启路由器获取新的ip试试了&lt;br /&gt;
&lt;br /&gt;
输入  &amp;lt;code&amp;gt;cat /var/log/vps_sync.log&amp;lt;/code&amp;gt; 这样就是成功了&lt;br /&gt;
&lt;br /&gt;
[[File:Apinftisok.png|border]]&lt;br /&gt;
&lt;br /&gt;
如果ipv6获取的速度慢 可能出现防火墙没有允许ipv6的情况&lt;br /&gt;
&lt;br /&gt;
[[File:Apinftiserror.png|border]]&lt;br /&gt;
&lt;br /&gt;
遇到极端情况下 可以手动更新&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;rm -f /etc/config/vps_last_ip &amp;amp;&amp;amp; /root/checkip.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
删除存储的ip然后执行脚本 ip一直相同的话是不会调用api的&lt;br /&gt;
&lt;br /&gt;
另外如果你修改了/root/checkip.sh 那么还要输入 &amp;lt;code&amp;gt;systemctl restart router-log-watcher.service&amp;lt;/code&amp;gt; 重启这个服务才生效&lt;br /&gt;
&lt;br /&gt;
如果成功更新ip了 就可以把允许ssh的端口删掉了就真正变成白名单模式了&lt;/div&gt;</summary>
		<author><name>EliToviyah</name></author>
	</entry>
</feed>