用 Docker + macvlan 跑 mihomo 旁路由:宿主机互通与局域网接入

家里用一台 N95 迷你主机当 homelab host,Docker 里跑 mihomo,用 macvlan 给它分一个独立的局域网 IP(10.0.0.6),让它当局域网的旁路由——设备把网关指过去,流量就经过 mihomo 分流代理,不用动主路由的整体路由结构。 容器起来只是第一步,实际会撞上两件事:宿主机和自己衍生出的 macvlan 容器默认互相不通,以及局域网设备到底怎么切到这个网关。这篇把两个都记下来。 为什么用 macvlan docker-compose 配置: services: mihomo: image: metacubex/mihomo:latest container_name: mihomo cap_add: - NET_ADMIN devices: - /dev/net/tun:/dev/net/tun volumes: - ./data:/root/.config/mihomo networks: macvlan_net: ipv4_address: 10.0.0.6 # 需要 IPv6 就把下面带 # 的行全解开(含 sysctls 里那两行) # driver_opts: # com.docker.network.endpoint.sysctls: "net.ipv6.conf.IFNAME.disable_ipv6=0,net.ipv6.conf.IFNAME.accept_ra=2" sysctls: net.ipv4.ip_forward: 1 # net.ipv6.conf.all.disable_ipv6: 0 # net.ipv6.conf.all.forwarding: 1 networks: macvlan_net: driver: macvlan driver_opts: parent: enp1s0 ipam: config: - subnet: 10.0.0.0/24 gateway: 10.0.0.1 用 macvlan 而不是普通 bridge,是因为要给容器一个和局域网其他设备平级的真实 IP,这样它才能被其他设备当网关直接访问、转发流量。bridge 模式下容器藏在宿主机的 NAT 后面,别的设备根本没法把它当网关。 ...

2026年8月20日 · 更新于 2026年8月26日 · 2 分钟 · Vinkey

Conda 环境配置指南

本文的命令部分借助 GitHub Copilot 整理 Anaconda 还是 Miniconda? conda 是一个包管理器,支持 Linux、Windows、Mac,其中包含了 Python,conda create -n new_pyenv python=3.12 可以方便地创建名为 new_pyenv 的 Python 虚拟环境。 安装 conda 有两种常见类型,anaconda 和 miniconda。Anaconda 安装体积大,安装包中已经含有很多软件和库;而 miniconda 体积小巧,创建环境时需要的库会自动联网下载。 因此,上网不方便的可以选择 anaconda 一步到位,但其实中国大陆的网络问题可以通过换源解决。如果在境外网络环境,比如香港,我个人推荐直接选择 miniconda,安装快。刚入门的时候可能把路径什么的搞错了,卸载重装也很方便——我就是这样摸索出来的。 官网对每个平台、anaconda/miniconda 都有很清楚的安装说明,这里不重复。但安装过程中有两个选项值得提醒一下。 两个我不会勾的选项 ❌ 自动添加系统路径 不要选择添加系统路径,避免和其他环境冲突。让 conda 自己的 shell hook 去负责激活就好。 ⚠️ 自动激活环境(conda init) 即 conda init 命令。开启后每次打开命令行都会自动运行 conda activate,激活一个环境。 个人觉得没必要,尤其是在 Windows 上:如果 PowerShell 设置了 conda init 自动激活,每次打开一个 PowerShell 都要加载半天。以前我以为是电脑不行,原来是我误会 Windows 了。 但我发现在 cmd 中启用这个命令基本没有什么影响: conda init cmd.exe 如果你已经在 PowerShell 上开了想撤销,用: ...

2026年8月18日 · 1 分钟 · Vinkey

用 systemd 模板单元一份配置跑多个实例:以 frp 为例

一台机器上要同时连三个 frp 服务端,网上大部分教程的做法是复制三份 frpc.service,改三次路径。改一次参数要同步改三个文件,迟早出错。 systemd 自带的**模板单元(template unit)**就是为这种场景准备的:写一份 frpc@.service,后面想开几个实例就开几个。这篇先用 frp 走一遍完整流程,再讲怎么把同一套写法套到 xray、socat、Python 脚本等任何需要多开的程序上。 模板单元是什么 普通单元文件叫 frpc.service,模板单元文件名多一个 @,叫 frpc@.service。 它本身不会运行,只有在你启动 frpc@azure_hk.service 的时候,systemd 才会拿这个模板生成一个真正的实例,并且把 @ 后面的那串字符串(这里是 azure_hk)作为实例名,替换掉单元文件里的 %i。 所以「一份模板 + N 个实例名 = N 个互相独立的服务」,每个实例有独立的进程、独立的日志、独立的启停状态,但共用同一份单元文件。 frp 实战 1. 写模板单元 新建 /etc/systemd/system/frpc@.service: [Unit] Description=Frp Client Service - %i After=network.target syslog.target Wants=network.target [Service] Type=simple Restart=on-failure RestartSec=5s # %i 会被替换为 @ 后面的实例名 ExecStart=/usr/local/frp/frpc -c /usr/local/frp/frpc-%i.toml [Install] WantedBy=multi-user.target 2. 按命名约定放配置文件 模板能生效的前提是配置文件名和实例名一一对应。这里约定为 /usr/local/frp/frpc-<实例名>.toml: ...

2026年8月18日 · 2 分钟 · Vinkey