<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>技术 on Elizabeththh</title><link>https://westwindsays.me/tech/</link><description>Recent content in 技术 on Elizabeththh</description><generator>Hugo -- gohugo.io</generator><language>zh-Hans</language><atom:link href="https://westwindsays.me/tech/index.xml" rel="self" type="application/rss+xml"/><item><title>使用 WinFsp 和 Rclone 实现 Windows 和 Linux 文件共享</title><link>https://westwindsays.me/tech/fshare/</link><pubDate>Sun, 22 Mar 2026 00:00:00 +0000</pubDate><guid>https://westwindsays.me/tech/fshare/</guid><description>&lt;h1 id="使用-winfsp-和-rclone-实现-windows-和-linux-文件共享"&gt;使用 WinFsp 和 Rclone 实现 Windows 和 Linux 文件共享&lt;/h1&gt;
&lt;p&gt;最近写实验报告等文档工作经常需要在 Windows 笔记本和实验室 Linux 主机交换文件（主要是截图），今天终于受不了敲 &lt;code&gt;scp&lt;/code&gt; 命令了，所以探索了一个用 &lt;strong&gt;WinFsp&lt;/strong&gt; 和 &lt;strong&gt;Rclone&lt;/strong&gt; 实现两个系统间文件共享的方案。这下远程 Linux 裸机开发的文件共享的问题彻底解决了，WSL 崩的频率已经让人无法使用了……&lt;/p&gt;
&lt;h2 id="前置条件"&gt;前置条件&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://winfsp.dev/rel/"&gt;&lt;strong&gt;WinFsp&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src="winstp.png" alt="winfsp"&gt;&lt;/p&gt;
&lt;ol start="2"&gt;
&lt;li&gt;&lt;a href="https://rclone.org/downloads/"&gt;&lt;strong&gt;Rclone&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;请自行选择合适版本下载&lt;/p&gt;
&lt;ol start="3"&gt;
&lt;li&gt;确保两台机器之间能够建立 SSH 连接&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="配置-ssh-隧道与端口转发"&gt;配置 SSH 隧道与端口转发&lt;/h2&gt;
&lt;p&gt;编辑 Windows 下的 &lt;code&gt;~/.ssh/config&lt;/code&gt; 文件。在目标节点的配置中，将本地端口（如 2222）转发到远端的 22 端口，这样可以将读写文件的请求通过 SSH 隧道转发到远程主机&lt;/p&gt;
&lt;p&gt;示例配置：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-conf" data-lang="conf"&gt;# 目标节点
Host Lab
Hostname xxx
User your_user_name
# 将本地 2222 端口流量转发至远端 22 端口
LocalForward 2222 127.0.0.1:22
ServerAliveInterval 60
ServerAliveCountMax 3
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="配置-rclone"&gt;配置 Rclone&lt;/h2&gt;
&lt;p&gt;在 Rclone 程序同级目录下创建配置文件 &lt;code&gt;rclone.conf&lt;/code&gt;。配置 Rclone 直接挂载本地暴露出的 2222 端口（建立 SSH 连接之后，访问本地 2222 端口即通过 SSH 访问远程主机）&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-conf" data-lang="conf"&gt;[lab]
type = sftp
host = 127.0.0.1
port = 2222
user = your_user_name
key_file = path/to/your/identity/file
shell_type = unix
md5sum_command = md5sum
sha1sum_command = sha1sum
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="编写静默挂载脚本"&gt;编写静默挂载脚本&lt;/h2&gt;
&lt;p&gt;创建 PowerShell 脚本 &lt;code&gt;Mount-Lab.ps1&lt;/code&gt;（名字什么的随便啦）。该脚本负责清理历史进程、建立后台隧道，并执行挂载命令。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# E:\apps\rclone\Mount-Lab.ps1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 清理可能残留的挂载进程&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;Stop-Process&lt;/span&gt; &lt;span class="n"&gt;-Name&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;rclone&amp;#34;&lt;/span&gt; &lt;span class="n"&gt;-Force&lt;/span&gt; &lt;span class="n"&gt;-ErrorAction&lt;/span&gt; &lt;span class="n"&gt;SilentlyContinue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 启动 SSH 隧道&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;Start-Process&lt;/span&gt; &lt;span class="n"&gt;-FilePath&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;ssh.exe&amp;#34;&lt;/span&gt; &lt;span class="n"&gt;-ArgumentList&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;-N lab&amp;#34;&lt;/span&gt; &lt;span class="n"&gt;-WindowStyle&lt;/span&gt; &lt;span class="n"&gt;Hidden&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 等待隧道建立&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;Start-Sleep&lt;/span&gt; &lt;span class="n"&gt;-Seconds&lt;/span&gt; &lt;span class="mf"&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$mount_point&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;E:\remote\lab&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$parent_dir&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Split-Path&lt;/span&gt; &lt;span class="nv"&gt;$mount_point&lt;/span&gt; &lt;span class="n"&gt;-Parent&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$cache_dir&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;E:\apps\rclone\cache&amp;#34;&lt;/span&gt; &lt;span class="c"&gt;# 缓存目录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$rclone_exe&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;E:\apps\rclone\rclone.exe&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$config_path&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;E:\apps\rclone\rclone.conf&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 注意 mount 命令后的 lab 要与 rclone.conf 里定义的名称保持一致。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 只挂载自己的用户目录最好，以免手残删掉根目录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$rclone_args&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="vm"&gt;@&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;mount&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;lab:/home/eliza&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$mount_point&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;--config&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$config_path&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;--vfs-cache-mode&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;full&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;--cache-dir&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$cache_dir&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;--vfs-cache-max-size&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;10G&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;--vfs-cache-max-age&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;24h&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;--dir-cache-time&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;15s&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;--vfs-read-chunk-size&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;16M&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;-o&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;ThreadCount=16&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(!(&lt;/span&gt;&lt;span class="nb"&gt;Test-Path&lt;/span&gt; &lt;span class="nv"&gt;$parent_dir&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;New-Item&lt;/span&gt; &lt;span class="n"&gt;-ItemType&lt;/span&gt; &lt;span class="n"&gt;Directory&lt;/span&gt; &lt;span class="n"&gt;-Force&lt;/span&gt; &lt;span class="n"&gt;-Path&lt;/span&gt; &lt;span class="nv"&gt;$parent_dir&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;Out-Null&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Test-Path&lt;/span&gt; &lt;span class="nv"&gt;$mount_point&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;Remove-Item&lt;/span&gt; &lt;span class="n"&gt;-Path&lt;/span&gt; &lt;span class="nv"&gt;$mount_point&lt;/span&gt; &lt;span class="n"&gt;-Force&lt;/span&gt; &lt;span class="n"&gt;-Recurse&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 执行挂载&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;Start-Process&lt;/span&gt; &lt;span class="n"&gt;-FilePath&lt;/span&gt; &lt;span class="nv"&gt;$rclone_exe&lt;/span&gt; &lt;span class="n"&gt;-ArgumentList&lt;/span&gt; &lt;span class="nv"&gt;$rclone_args&lt;/span&gt; &lt;span class="n"&gt;-WindowStyle&lt;/span&gt; &lt;span class="n"&gt;Hidden&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--vfs-cache-mode full&lt;/code&gt; 指 &lt;strong&gt;WinFsp&lt;/strong&gt; 拦截的读写请求会先被 Rclone 缓存到 Windows 的本地临时目录，待文件句柄关闭后，再异步同步到远程主机.在读取时，远程数据会以数据块为单位下载到本地并驻留，后续读会命中本地磁盘&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--dir-cache-time 15s&lt;/code&gt; 目录结构缓存设为 15s，确保远程主机进行文件的增删时 Windows 能够快速更新。不设成更短的时间区间是因为，目录结构同步的请求延迟高，越短性能开销越大&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;起初我的挂载点是一个全局的盘符 E:\，日常使用中发现资源管理器会经常卡顿，浏览器文件选择会直接卡死，网络 I/O 性能开销过大。于是更改挂载点为一个普通目录，并启用缓存目录，不再出现卡顿情况&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="配置系统开机静默自启"&gt;配置系统开机静默自启&lt;/h2&gt;
&lt;p&gt;利用 Windows 任务计划程序实现登录后自动挂载：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;按下&lt;code&gt;Win&lt;/code&gt; + &lt;code&gt;R&lt;/code&gt; 输入 &lt;code&gt;taskschd.msc&lt;/code&gt; 启动任务计划程序，点击右侧的 &lt;strong&gt;创建任务&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src="task-create.png" alt="task-create"&gt;&lt;/p&gt;
&lt;ol start="2"&gt;
&lt;li&gt;&lt;strong&gt;常规&lt;/strong&gt; 标签页：勾选底部的 &lt;strong&gt;隐藏&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src="general.png" alt="general"&gt;&lt;/p&gt;
&lt;ol start="3"&gt;
&lt;li&gt;&lt;strong&gt;触发器&lt;/strong&gt; 标签页：新建触发器，开始任务选择 &lt;strong&gt;登录时&lt;/strong&gt;，勾选 &lt;strong&gt;延迟任务时间&lt;/strong&gt; 并输入 &lt;code&gt;30 秒&lt;/code&gt;（这是为了确保系统底层网络栈已完全初始化）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src="trigger.png" alt="trigger"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="new.png" alt="new"&gt;&lt;/p&gt;
&lt;ol start="4"&gt;
&lt;li&gt;&lt;strong&gt;操作&lt;/strong&gt; 标签页：新建操作，程序填入 &lt;code&gt;powershell.exe&lt;/code&gt;，参数填入：
&lt;code&gt;-WindowStyle Hidden -ExecutionPolicy Bypass -File &amp;quot;E:\apps\rclone\Mount-Lab.ps1&amp;quot;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src="operation.png" alt="operation"&gt;&lt;/p&gt;
&lt;p&gt;注意 &lt;code&gt;-File&lt;/code&gt; 参数后要换成脚本所在的正确路径&lt;/p&gt;
&lt;ol start="5"&gt;
&lt;li&gt;&lt;strong&gt;条件&lt;/strong&gt; 标签页：取消勾选“只有在计算机使用交流电源时才启动此任务”，勾选“只有在以下网络连接可用时才启动”，选择“任何连接”&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src="cond.png" alt="cond"&gt;&lt;/p&gt;
&lt;ol start="6"&gt;
&lt;li&gt;&lt;strong&gt;设置&lt;/strong&gt; 标签页：取消勾选“如果任务运行时间超过以下时间，停止任务”，勾选“如果任务失败，按以下频率重新启动”（每一分钟，五次）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src="settings.png" alt="settings"&gt;&lt;/p&gt;
&lt;p&gt;保存设置并重启系统。登录后等待 30 秒，就可以在资源管理器中会出现映射好的 Z: 盘啦&lt;/p&gt;</description></item><item><title>虚拟机设置桥接网络(VMware)</title><link>https://westwindsays.me/tech/vmware-bridge-network/</link><pubDate>Mon, 17 Nov 2025 00:00:00 +0000</pubDate><guid>https://westwindsays.me/tech/vmware-bridge-network/</guid><description>&lt;p&gt;最近在折腾虚拟机配置 VPN 时遇到了桥接模式配置的问题，这里简单总结一下。使用的虚拟机软件为 VMware Workstation 17 Pro(v17.5.0)，虚拟机系统为 Ubuntu Server 24.04.3 LTS。关于如何安装虚拟机，这里不再赘述，网上各处都有图文并茂的教程。&lt;/p&gt;
&lt;h2 id="vmware-配置"&gt;VMware 配置&lt;/h2&gt;
&lt;h3 id="编辑虚拟网络配置"&gt;编辑虚拟网络配置&lt;/h3&gt;
&lt;p&gt;首先以管理员身份运行 VMware，找到导航栏：编辑 -&amp;gt; 虚拟网络编辑器。
&lt;img src="settings.png" alt=""&gt;&lt;/p&gt;
&lt;p&gt;        然后把 VMnet0 的桥接对象选为电脑的网卡
&lt;img src="net.png" alt=""&gt;&lt;/p&gt;
&lt;p&gt;电脑网卡型号可以在：控制面板 -&amp;gt; 网络和 Internet -&amp;gt; 查看网络状态和任务 -&amp;gt; 更改适配器设置 处查看
&lt;img src="netcard.png" alt=""&gt;&lt;/p&gt;
&lt;h3 id="更改虚拟机设置"&gt;更改虚拟机设置&lt;/h3&gt;
&lt;p&gt;然后在 VMware 导航栏：虚拟机 -&amp;gt; 设置 处将虚拟机网络模式改为桥接模式，如下图：
&lt;img src="netset.png" alt=""&gt;&lt;/p&gt;
&lt;h2 id="宿主机设置"&gt;宿主机设置&lt;/h2&gt;
&lt;h3 id="桥接协议检查"&gt;桥接协议检查&lt;/h3&gt;
&lt;p&gt;首先确保你的网络连接状态安装了如下协议，查看方式为：控制面板 -&amp;gt; 网络和 Internet -&amp;gt; 查看网络状态和任务 -&amp;gt; 更改适配器设置 -&amp;gt; 右键目前的网络连接设备 -&amp;gt; 属性。若未安装，请自行查找教程安装。
&lt;img src="protocol.png" alt=""&gt;&lt;/p&gt;
&lt;h3 id="记录当前网络信息"&gt;记录当前网络信息&lt;/h3&gt;
&lt;p&gt;查看当前网络的 ipv4 地址、ipv4 子网掩码、ipv4 默认网关及 ipv4 DNS 服务器，查看方式为：控制面板 -&amp;gt; 网络和 Internet -&amp;gt; 查看网络状态和任务 -&amp;gt; 更改适配器设置 -&amp;gt; 右键目前的网络连接设备 -&amp;gt; 状态 -&amp;gt; 详细信息，记录下来，待会写配置文件的时候要用
&lt;img src="net1.png" alt=""&gt;&lt;/p&gt;
&lt;h3 id="允许接收-ping-数据包"&gt;允许接收 ping 数据包&lt;/h3&gt;
&lt;p&gt;打开：控制面板 -&amp;gt; 系统与安全 -&amp;gt; Windows Defender 防火墙 -&amp;gt; 高级设置 -&amp;gt; 入站规则
找到虚拟机监控（回显请求ICMPv4-In）一项，右键 -&amp;gt; 属性 -&amp;gt; 选择已启用&lt;/p&gt;
&lt;p&gt;&lt;img src="in.png" alt=""&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="start.png" alt=""&gt;&lt;/p&gt;
&lt;p&gt;笔者自己配置的时候，就是因为没有改这个设置，导致虚拟机一直 ping 不通宿主机，非常的头疼。上网查了一下才知道，安装虚拟机软件的时候，Windows防火墙是默认不允许虚拟机 ping 主机的。这里的回显请求（ICMP Echo Request）就是 ping 命令发送的报文，在防火墙允许虚拟机 ping 的报文入站，虚拟机就能 ping 通宿主机了。&lt;/p&gt;
&lt;h2 id="虚拟机系统设置"&gt;虚拟机系统设置&lt;/h2&gt;
&lt;p&gt;启动虚拟机，进入系统；Ubuntu 系统的 ipv4 配置文件存放在 /etc/netplan 目录下；&lt;/p&gt;
&lt;h3 id="删除默认配置文件"&gt;删除默认配置文件&lt;/h3&gt;
&lt;p&gt;首先删除原来的配置文件&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ls /etc/netplan
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 若有默认文件，删除之&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo rm /etc/netplan/&amp;lt;default_config_file&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="新建配置文件"&gt;新建配置文件&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 新建文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo vim /etc/netplan/00_custom_config.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 查看网卡名称&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ip a &lt;span class="c1"&gt;# 应该会出现两项，lo之外的另一个就是虚拟机的网卡，笔者的为 ens33&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;把下面的内容写入新建的配置文件&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;network&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ehernets&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ens33&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 虚拟机网卡名称&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;dhcp4&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;addresses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="m"&gt;192.168.43&lt;/span&gt;&lt;span class="l"&gt;.x/24 &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 此处设置虚拟机的 ipv4 地址，网段应与宿主机一致；子网掩码若为255.255.255.0，斜杠后填24即可；若为其它，可询问大模型如何填写，此处不再赘述。&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;routes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;default&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;via&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;192.168.43.1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 此处填写 ipv4 默认网关地址&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;nameservers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;addresses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="m"&gt;192.168.43.1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# 此处填写 ipv4 DNS 服务器地址&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;保存并退出&lt;/p&gt;
&lt;p&gt;应用配置&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo netplan apply
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ip a &lt;span class="c1"&gt;# 检查配置是否生效&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;尝试宿主机与虚拟机互ping，应该是能ping通的
        
        
        &lt;/p&gt;</description></item><item><title>Docker镜像源配置</title><link>https://westwindsays.me/tech/docker-mirror-config/</link><pubDate>Thu, 09 Oct 2025 00:00:00 +0000</pubDate><guid>https://westwindsays.me/tech/docker-mirror-config/</guid><description>&lt;p&gt;        在拉取 Docker 镜像的时候，经常会遇到超时问题，这时我们需要配置 Docker 镜像源和 DNS&lt;/p&gt;
&lt;h2 id="配置-etcdockerdaemonjson-文件"&gt;配置 &lt;code&gt;/etc/docker/daemon.json&lt;/code&gt; 文件&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo mkdir -p /etc/docker
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo tee /etc/docker/daemon.json &amp;gt; /dev/null &lt;span class="s"&gt;&amp;lt;&amp;lt;&amp;#39;EOF&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;#34;registry-mirrors&amp;#34;: [
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;#34;https://docker.m.daocloud.io&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;#34;https://hub.uuuadc.top&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;#34;https://mirror.ccs.tencentyun.com&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; ],
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;#34;dns&amp;#34;: [&amp;#34;8.8.8.8&amp;#34;, &amp;#34;1.1.1.1&amp;#34;, &amp;#34;223.5.5.5&amp;#34;, &amp;#34;114.114.114.114&amp;#34;],
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; &amp;#34;max-concurrent-downloads&amp;#34;: 1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;设置镜像源是为了能够加速 Docker 镜像的下载，Docker镜像默认从 Docker Hub 拉取，中国大陆访问不稳定。设置 DNS 是为了解决域名解析问题，让 Docker 能够找到 IP 地址。上面写进文件里的 DNS 分别是 Google，Cloudflare，阿里和电信 DNS&lt;/p&gt;
&lt;h2 id="重启-docker"&gt;重启 Docker&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl daemon-reload
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl restart docker
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="检查测试"&gt;检查测试&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl status docker -n &lt;span class="m"&gt;20&lt;/span&gt; &lt;span class="c1"&gt;# 应输出 active(running)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker run --rm hello-world &lt;span class="c1"&gt;# Hello from Docker&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;        
        
        
        
        &lt;/p&gt;</description></item></channel></rss>