macOS ↔ Debian 双网卡直连开发环境搭建
如果你在做双机开发——Mac 负责 Xcode / iOS Simulator,Debian 台式机负责后端、Docker、数据库和编译——那么 Mac 与 Debian 之间最值得优先投入的,往往不是更快的 Wi‑Fi,而是一根 Cat6 网线直连。
本文介绍一套 双网卡有线直连 方案:
- Mac 的 Ethernet 与 Debian 的一张网卡通过独立网线 点对点直连,SSH 与开发流量全程走网线,稳定、低延迟、不占用 Wi‑Fi 带宽;
- Debian 通过 第二张网卡(板载网口 / Wi‑Fi / USB 网卡)独立访问互联网,
apt update、docker pull、git clone都不依赖 Mac; - Mac 用
devbox.local访问 Debian,由 mDNS / Avahi 自动解析到直连网卡的10.10.10.2,不需要记 IP,Debian 换个网络地址也不影响。
适用场景:
- 一台 Mac(笔记本 / mini)承担 Xcode、iOS Simulator 等 Apple 平台开发;
- 一台 Debian 台式机承担后端、Docker、数据库与编译任务;
- 希望 SSH、后端 API、数据库连接走专用网线,稳定且不占 Wi‑Fi;
- 希望 Debian 的 Internet 访问与开发链路相互独立,互不拖累。
如果你还没有搭建双机开发的整体框架,建议先阅读《/posts/dual-machine-dev-environment-guide/》;本文是其中「网络链路」部分的独立深化版,也可以单独使用。
全文按实施顺序展开,分为以下几个部分:
- 方案概览与 IP 规划(1 ~ 3)
- macOS 有线接口配置(4)
- Debian 双网卡配置与路由验证(5 ~ 8)
- 打通
.local与 SSH(9 ~ 21) - 后端服务、Docker 与 iOS 联调(22 ~ 24)
- Headless 使用、健康检查与故障排查(25 ~ 35)
- 日常使用方式与配置模板(36 ~ 40)
1. 方案概览
推荐的最终网络结构:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Internet
│
┌───────┴───────┐
│ │
Wi‑Fi/路由器 Wi‑Fi/路由器
│ │
▼ ▼
┌─────────┐ ┌─────────────┐
│ macOS │ │ Debian │
│ Mac M2 │ │ 13900K PC │
└────┬────┘ └──────┬──────┘
│ │
Ethernet/USB-C Ethernet NIC 1
10.10.10.1/24 10.10.10.2/24
│ │
└──── Cat6 ────────┘
│
NIC 2 / Wi‑Fi
│
▼
Internet
Debian 的两个网络接口职责明确:
| 设备 | 接口 | 示例地址 | 默认网关 | 用途 |
|---|---|---|---|---|
| Mac | Wi‑Fi | DHCP | 有 | Mac 自己上网 |
| Mac | Ethernet | 10.10.10.1/24 | 无 | 直连 Debian |
| Debian | Ethernet NIC 1 | 10.10.10.2/24 | 无 | 直连 Mac |
| Debian | Wi‑Fi / NIC 2 | DHCP | 有 | Debian 自己上网 |
最重要的设计原则:
Mac ↔ Debian 的直连网卡不配置默认网关,也不配置 DNS。
这样:
ssh devbox.local→ 走 Cat6 网线;http://devbox.local:3000→ 走 Cat6 网线;- Debian 的
apt update、docker pull、git clone→ 走 Debian 自己的第二张网卡; - Mac 自己访问 Internet → 走 Mac 的 Wi‑Fi;
- 两台机器互不依赖对方进行 NAT/网络共享。
2. 硬件要求
2.1 Mac
Mac 需要一个可用的 Ethernet 接口。
如果 Mac 没有 RJ45:
1
2
3
4
5
6
7
Mac USB-C / Thunderbolt
│
▼
USB-C → Ethernet Adapter
│
▼
Cat6
1GbE 已经足够 SSH、后端 API、数据库和远程开发。
如果未来需要频繁传输大型 Docker 镜像、数据集或构建产物,可以使用 2.5GbE。
2.2 Debian 台式机
理想情况:
1
2
NIC 1 → Mac 专用直连
NIC 2 → 路由器 / Internet
第二个接口可以是:
- 主板 Wi‑Fi;
- USB Wi‑Fi;
- 第二个板载 RJ45;
- PCIe Ethernet 网卡;
- USB Ethernet 网卡。
2.3 网线
推荐:
1
Cat6
Cat6 可以正常工作在:
- 1GbE;
- 2.5GbE;
- 更高速率取决于距离和设备能力。
现代网卡通常支持 Auto MDI-X,因此 Mac 和 Debian 可以直接使用普通网线连接,不需要交叉线。
3. IP 地址规划
本文统一使用:
1
2
3
4
5
Mac Ethernet:
10.10.10.1/24
Debian Direct Ethernet:
10.10.10.2/24
子网:
1
10.10.10.0/24
对应子网掩码:
1
255.255.255.0
直连网络两端都不要配置 Router / Gateway。
如果你的家庭网络、公司网络或 VPN 已经使用 10.10.10.0/24,请换一个不冲突的私有网段,例如:
1
2
3
4
192.168.250.0/24
Mac: 192.168.250.1
Debian: 192.168.250.2
全文中的地址相应替换即可。
4. 配置 macOS 的有线接口
4.1 插入网线
连接:
1
2
3
4
5
Mac Ethernet Adapter
│
Cat6
│
Debian Direct NIC
不需要交换机,也不需要路由器。
4.2 macOS 设置静态 IPv4
打开:
1
2
3
4
5
系统设置
→ 网络
→ Ethernet / USB LAN / 你的网卡名称
→ 详细信息
→ TCP/IP
设置:
1
2
3
4
5
6
7
8
9
10
配置 IPv4:手动
IP 地址:
10.10.10.1
子网掩码:
255.255.255.0
路由器:
留空
DNS 不需要为这张直连网卡添加任何服务器。
最终应该是:
1
2
3
4
5
Mac Ethernet
IP: 10.10.10.1
Mask: 255.255.255.0
Gateway: none
DNS: none
Apple 官方支持在 macOS 的 Network → TCP/IP 中手动设置 IPv4 地址、子网掩码和 Router。
同时开着 Wi‑Fi 和 Ethernet 也没关系: macOS 会按「目标子网」选路。直连网段是独立的
10.10.10.0/24,只有网线两端在用,所以去10.10.10.2的流量必然走 Ethernet,其余流量仍走 Wi‑Fi,两者互不干扰;只要不给 Ethernet 填 Router,就不会影响 Mac 自己的默认路由。
4.3 查看 Mac 网络接口
Terminal:
1
ifconfig
也可以:
1
networksetup -listallnetworkservices
假设 USB Ethernet 最终对应:
1
en7
后续排错时会用到这个接口名。
5. 配置 Debian 双网卡
下面主要使用 NetworkManager,因为 Debian Desktop 以及很多常见 Debian 安装默认使用它。
首先查看设备:
1
nmcli device status
也可以:
1
ip -br link
示例:
1
2
3
4
DEVICE TYPE STATE
enp5s0 ethernet connected
wlp4s0 wifi connected
lo loopback connected
假设:
1
2
enp5s0 = Mac 直连网卡
wlp4s0 = Internet Wi‑Fi
请根据自己的机器修改接口名称。
6. Debian:配置 Mac 专用直连网卡
创建一个 NetworkManager connection:
1
2
3
4
5
6
7
8
sudo nmcli connection add \
type ethernet \
ifname enp5s0 \
con-name mac-direct \
ipv4.method manual \
ipv4.addresses 10.10.10.2/24 \
ipv4.never-default yes \
ipv6.method disabled
启用开机自动连接:
1
2
sudo nmcli connection modify mac-direct \
connection.autoconnect yes
启动:
1
sudo nmcli connection up mac-direct
如果
enp5s0之前插过路由器: NetworkManager 可能已有一条旧的自动连接(例如Wired connection 1)与mac-direct抢占这张网卡,导致mac-direct起不来或路由不对。可以先删除旧连接再重新启动:
1
2
sudo nmcli connection delete "Wired connection 1"
sudo nmcli connection up mac-direct
检查:
1
nmcli connection show mac-direct
以及:
1
ip -4 addr show dev enp5s0
应该看到:
1
inet 10.10.10.2/24
6.1 为什么使用 ipv4.never-default yes
这是本方案非常重要的一项设置。
它表示:
mac-direct这张网卡永远不能成为 Debian 的默认 Internet 路由。
因此 Debian 不会错误地尝试通过 Mac 上网。
NetworkManager 官方定义中,ipv4.never-default=yes 表示该连接不会被分配 IPv4 默认路由。
7. Debian:配置第二张网卡访问 Internet
7.1 如果第二个接口是 Wi‑Fi
查看 Wi‑Fi:
1
nmcli device wifi list
建议使用交互方式输入密码,避免密码写进 shell history:
1
sudo nmcli --ask device wifi connect "你的 Wi-Fi SSID" ifname wlp4s0
检查:
1
nmcli device status
然后:
1
ip route
应该出现类似:
1
2
3
default via 192.168.1.1 dev wlp4s0
10.10.10.0/24 dev enp5s0 proto kernel scope link src 10.10.10.2
192.168.1.0/24 dev wlp4s0 proto kernel scope link
7.2 如果第二个接口也是 Ethernet
例如:
1
2
enp5s0 → Mac
enp6s0 → 路由器
如果 enp6s0 尚未配置:
1
2
3
4
5
6
sudo nmcli connection add \
type ethernet \
ifname enp6s0 \
con-name internet \
ipv4.method auto \
ipv6.method auto
启动:
1
sudo nmcli connection up internet
路由器的 DHCP 会为该接口提供:
- IP;
- 默认网关;
- DNS。
8. 验证 Debian 路由是否正确
执行:
1
ip route
正确结构应该类似:
1
2
3
default via 192.168.1.1 dev wlp4s0
10.10.10.0/24 dev enp5s0 scope link src 10.10.10.2
192.168.1.0/24 dev wlp4s0 scope link
验证去 Mac 的流量
1
ip route get 10.10.10.1
应该包含:
1
2
dev enp5s0
src 10.10.10.2
验证去 Internet 的流量
1
ip route get 1.1.1.1
应该显示:
1
dev wlp4s0
或者 Debian 的第二张有线网卡,例如:
1
dev enp6s0
9. 先验证 Mac ↔ Debian 的基础网络
在 Debian:
1
ping -c 4 10.10.10.1
在 Mac:
1
ping -c 4 10.10.10.2
如果正常,通常会看到非常低的 RTT:
1
< 1 ms
如果 IP 互 ping 都失败,请暂时不要继续 .local 和 SSH 配置,先检查:
- 网线;
- USB Ethernet Adapter;
- Debian 网卡是否 UP;
- 两边 IPv4 是否在同一
/24; - 防火墙。
10. 配置 Debian 主机名
本文使用:
1
devbox
设置:
1
sudo hostnamectl set-hostname devbox
检查:
1
hostname
应该输出:
1
devbox
检查 /etc/hosts:
1
cat /etc/hosts
如果存在:
1
127.0.1.1 old-hostname
建议改成:
1
127.0.1.1 devbox
编辑:
1
sudoedit /etc/hosts
11. 配置 .local:Avahi / mDNS
.local 不是传统 DNS 的静态映射。
本方案使用:
1
mDNS / Bonjour
Debian 上使用:
1
Avahi
macOS 原生支持 Bonjour/mDNS。
目标是让:
1
devbox.local
自动解析到 Debian 当前公布的地址。
11.1 安装 Avahi
Debian:
1
2
sudo apt update
sudo apt install avahi-daemon avahi-utils
启动并设置开机启动:
1
sudo systemctl enable --now avahi-daemon
检查:
1
systemctl status avahi-daemon
Debian 的 avahi-daemon 会发布本机地址;默认 mDNS 域就是 .local。
12. 强烈推荐:让 .local 只通过 Mac 直连网卡发布
这是双网卡环境里最重要的细节之一。
如果不限制 Avahi,Debian 可能同时在:
1
2
enp5s0 → Mac direct
wlp4s0 → 家庭 Wi‑Fi
上发布:
1
devbox.local
这样 Mac 有可能获得多个地址,无法保证你想要的 SSH 一定走 Cat6。
因此建议 Avahi 只监听 Mac 直连网卡。
编辑:
1
sudoedit /etc/avahi/avahi-daemon.conf
找到现有的:
1
[server]
在这个 section 中加入:
1
2
3
4
[server]
allow-interfaces=enp5s0
use-ipv4=yes
use-ipv6=no
注意:
- 如果文件已经存在
[server],不要再创建第二个[server]; enp5s0必须换成你实际连接 Mac 的网卡名;- 本文为了让路径最确定,直连链路只使用 IPv4;
- Avahi 默认会使用系统 hostname,所以不需要额外设置
host-name=devbox。
重启:
1
sudo systemctl restart avahi-daemon
确认:
1
systemctl --no-pager --full status avahi-daemon
Debian 官方 avahi-daemon.conf 手册说明:
1
allow-interfaces=
可以指定 Avahi 允许使用的网络接口,其他接口会被忽略。
13. 在 Mac 上测试 .local
首先:
1
ping -c 4 devbox.local
理想输出中应该看到:
1
PING devbox.local (10.10.10.2)
重点是确认解析结果:
1
10.10.10.2
而不是 Debian Internet 网卡上的 192.168.x.x 地址。
如果看到:
1
devbox.local → 10.10.10.2
说明 mDNS 路径已经正确。
14. 安装和配置 SSH Server
Debian:
1
2
sudo apt update
sudo apt install openssh-server
启动:
1
sudo systemctl enable --now ssh
检查:
1
systemctl status ssh
检查监听:
1
ss -lntp | grep ':22'
15. Mac 使用 .local SSH
假设 Debian 用户名:
1
developer
在 Mac:
1
ssh [email protected]
正常情况下:
1
2
3
4
5
6
7
devbox.local
↓ mDNS
10.10.10.2
↓ routing
Mac Ethernet
↓ Cat6
Debian enp5s0
这意味着即使 Debian 的 Internet 网卡 IP 发生变化,也不会影响:
1
ssh [email protected]
可选:如果也想从 Debian SSH 到 Mac(例如反向排错),需要在 Mac 上开启 系统设置 → 通用 → 共享 → 远程登录。直连网卡本身不影响这一功能。
16. 验证 SSH 确实走网线
16.1 先看 .local 解析地址
Mac:
1
ping -c 1 devbox.local
应该解析:
1
10.10.10.2
16.2 查看 macOS 对该地址选择的接口
Mac:
1
route -n get 10.10.10.2
查看:
1
interface:
例如:
1
interface: en7
这个接口应该就是你的 Ethernet Adapter。
可以通过:
1
ifconfig en7
确认其地址是:
1
10.10.10.1
16.3 Debian 反向检查
Debian:
1
ip route get 10.10.10.1
应该看到:
1
10.10.10.1 dev enp5s0 src 10.10.10.2
到这里,可以确定:
1
SSH = Cat6
而不是 Wi‑Fi。
17. 推荐配置 SSH Key
17.1 Mac 生成密钥
如果还没有:
1
ssh-keygen -t ed25519 -a 100
默认:
1
2
~/.ssh/id_ed25519
~/.ssh/id_ed25519.pub
建议为私钥设置密码。
17.2 将公钥加入 Debian
macOS 不一定预装 ssh-copy-id,可以直接使用:
1
2
3
ssh [email protected] \
'umask 077; mkdir -p ~/.ssh; cat >> ~/.ssh/authorized_keys' \
< ~/.ssh/id_ed25519.pub
然后:
1
2
ssh [email protected] \
'chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys'
测试:
1
ssh [email protected]
18. 配置 Mac 的 ~/.ssh/config
编辑:
1
nano ~/.ssh/config
加入:
Host dev
HostName devbox.local
User developer
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 30
ServerAliveCountMax 3
AddKeysToAgent yes
UseKeychain yes
设置权限:
1
chmod 600 ~/.ssh/config
以后:
1
ssh dev
即可。
IDE 也可以直接使用:
1
Host: dev
例如:
- VS Code Remote SSH;
- Cursor Remote SSH;
- JetBrains Gateway;
- rsync;
- scp;
- SFTP。
19. 可选:关闭 SSH 密码登录
必须确认 SSH Key 登录成功以后再做。
Debian:
1
sudoedit /etc/ssh/sshd_config.d/99-devbox.conf
写入:
1
2
3
PubkeyAuthentication yes
PasswordAuthentication no
PermitRootLogin no
检查配置:
1
sudo sshd -t
如果没有输出,表示语法正确。
重新加载:
1
sudo systemctl reload ssh
修改期间不要关闭当前 SSH Terminal。
新开一个 Mac Terminal:
1
ssh dev
确认还能登录后,再关闭旧连接。
20. 可选:只允许 Mac 直连地址 SSH
如果你希望 SSH 只面向:
1
10.10.10.2
而不监听 Debian 的 Internet/Wi‑Fi 网卡,可以配置:
1
sudoedit /etc/ssh/sshd_config.d/20-listen-direct.conf
加入:
1
ListenAddress 10.10.10.2
测试:
1
sudo sshd -t
然后:
1
sudo systemctl restart ssh
优点:
- Wi‑Fi/LAN 上看不到 SSH 服务;
- SSH 只允许从 Mac 专用网线进入。
缺点:
- 如果直连网卡配置出错,你无法通过第二张网卡 SSH 救援。
对于无显示器服务器,建议等整个环境运行稳定后再启用这一项。
21. 防火墙建议
如果 Debian 没有启用入站阻断防火墙,局部直连网络本身已经相对简单。
如果你使用 UFW,并且默认拒绝入站,可以只开放 Mac:
1
2
3
sudo ufw allow in on enp5s0 \
from 10.10.10.1 \
to any port 22 proto tcp
如果 Avahi 被防火墙阻断,还需要允许该直连接口上的 IPv4 mDNS:
1
2
3
sudo ufw allow in on enp5s0 \
from 10.10.10.1 \
to 224.0.0.251 port 5353 proto udp
检查:
1
sudo ufw status verbose
在远程无显示器机器上修改防火墙时,一定先保留现有 SSH 会话,再从第二个 Terminal 测试新连接。
22. 后端服务如何通过 .local 访问
例如 Debian 上的后端监听:
1
10.10.10.2:3000
Mac 可以:
1
http://devbox.local:3000
例如:
1
curl http://devbox.local:3000
22.1 后端监听地址
如果服务只需要给 Mac 使用,推荐绑定:
1
10.10.10.2
比:
1
0.0.0.0
更严格。
例如概念上:
1
2
Backend:
listen = 10.10.10.2:3000
这样服务不会自动暴露在 Debian 的 Wi‑Fi / 家庭 LAN 接口上。
23. Docker 推荐绑定方式
如果 Docker Container 内部监听:
1
0.0.0.0:3000
宿主机发布端口时可以只绑定直连地址。
compose.yaml:
1
2
3
4
5
services:
backend:
image: your-backend
ports:
- "10.10.10.2:3000:3000"
Mac:
1
curl http://devbox.local:3000
这样:
1
Mac → devbox.local → 10.10.10.2:3000
可以访问。
而 Debian 第二张网卡的:
1
192.168.x.x:3000
不会因为这个 Docker port mapping 自动暴露服务。
24. iOS Simulator / macOS App 开发
如果 Xcode 和 iOS Simulator 在 Mac 上:
1
2
3
4
5
6
7
8
9
10
11
12
Xcode App / Simulator
│
▼
http://devbox.local:3000
│
▼
Mac Ethernet
│
Cat6
│
▼
Debian Backend
这是非常适合本方案的使用方式。
注意:真机 iPhone
真实 iPhone 如果只连接家庭 Wi‑Fi,它并不在 Mac ↔ Debian 的 10.10.10.0/24 直连网络上。
因此:
1
2
iOS Simulator → 可以直接访问 devbox.local
真实 iPhone → 不一定可以
如果需要真实 iPhone 访问后端,可选择:
- 让 Debian 后端同时在家庭 LAN 上提供服务;
- 由 Mac 做路由/NAT;
- 使用开发隧道;
- 单独设计开发 VLAN / LAN。
这与 Mac 本地 Simulator 的情况不同。
25. Debian 无显示器 Headless 使用
配置完成以后,Debian 台式机可以不连接显示器。
日常控制:
1
ssh dev
推荐在 Debian 上安装:
1
sudo apt install tmux
开始 Session:
1
tmux new -s dev
断线后重新连接:
1
tmux attach -t dev
这样 SSH 客户端异常退出也不会终止:
- 编译任务;
- 后端进程;
- shell 工作;
- 数据处理任务。
对于长期运行的服务,更推荐使用:
- systemd;
- Docker Compose;
- Kubernetes;
- supervisor 等正式服务管理方式。
电源与唤醒: Mac 进入睡眠会断开直连链路,长时间开发可在终端用
caffeinate -i保持唤醒。Debian 无显示器常开时,建议在 BIOS 里关闭网卡节能(如 PCIe ASPM),需要远程开机时开启主板 Wake-on-LAN。
26. 可选:Debian 图形桌面远程访问
如果 Debian 安装了桌面环境,也可以通过 RDP 使用。
安装:
1
sudo apt install xrdp xorgxrdp
启用:
1
sudo systemctl enable --now xrdp
Mac 远程桌面客户端填写:
1
devbox.local
RDP 默认端口:
1
3389
需要注意:
xrdp 通常是远程图形登录 Session,不一定等同于“镜像台式机物理显示器当前 Session”。
如果只是后端开发,SSH + tmux 通常更加稳定、轻量。
27. 检查物理链路速度
Debian 安装:
1
sudo apt install ethtool
检查:
1
sudo ethtool enp5s0
重点:
1
2
3
Speed: 1000Mb/s
Duplex: Full
Link detected: yes
如果使用 2.5GbE,则可能是:
1
Speed: 2500Mb/s
如果发现:
1
Speed: 100Mb/s
通常需要检查:
- 网线;
- RJ45 水晶头;
- USB Ethernet Adapter;
- 网卡协商;
- 驱动。
另外,链路速度由两端协商决定:如果一边是 1GbE、另一边是 2.5GbE,最终会协商到 1GbE。想跑满 2.5GbE,需要 Mac 的 USB 网卡、Debian 的网卡以及网线都支持 2.5GbE。
28. 一次性健康检查
Debian
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
echo '=== interfaces ==='
ip -br addr
echo
echo '=== routes ==='
ip route
echo
echo '=== route to Mac ==='
ip route get 10.10.10.1
echo
echo '=== route to Internet ==='
ip route get 1.1.1.1
echo
echo '=== SSH ==='
systemctl is-active ssh
echo
echo '=== Avahi ==='
systemctl is-active avahi-daemon
理想结果:
1
2
3
4
10.10.10.2 → enp5s0
default route → wlp4s0 / Internet NIC
ssh → active
avahi-daemon → active
Mac
1
2
3
4
ping -c 1 10.10.10.2
ping -c 1 devbox.local
route -n get 10.10.10.2
ssh dev
重点确认:
1
2
devbox.local → 10.10.10.2
route interface → Ethernet
29. 重启测试
配置好以后一定执行一次完整重启测试。
先重启 Debian:
1
sudo reboot
等待机器启动后,在 Mac:
1
ping devbox.local
然后:
1
ssh dev
进入后检查:
1
ip route
确保:
1
2
default → Debian Internet NIC
10.10.10.0/24 → Debian Mac Direct NIC
再测试:
1
curl -I https://deb.debian.org/
确认 Debian 自己可以访问 Internet。
30. 常见故障排查
30.1 ping 10.10.10.2 不通
按顺序检查:
Mac
1
ifconfig
确认 Ethernet:
1
10.10.10.1
Debian
1
ip -4 addr
确认 direct NIC:
1
10.10.10.2/24
检查连接:
1
nmcli device status
检查链路:
1
sudo ethtool enp5s0
应该:
1
Link detected: yes
30.2 IP 可以 ping,但 devbox.local 不通
Debian:
1
systemctl status avahi-daemon
检查:
1
hostname
应该:
1
devbox
检查:
1
2
grep -E 'allow-interfaces|use-ipv4|use-ipv6' \
/etc/avahi/avahi-daemon.conf
确认接口名没有写错。
重启:
1
sudo systemctl restart avahi-daemon
Mac 再测试:
1
ping -c 1 devbox.local
30.3 devbox.local 解析到了 Wi‑Fi IP
例如:
1
devbox.local → 192.168.1.55
而不是:
1
10.10.10.2
说明 Avahi 很可能同时在多张网卡发布。
检查:
1
sudoedit /etc/avahi/avahi-daemon.conf
确保:
1
2
[server]
allow-interfaces=enp5s0
然后:
1
sudo systemctl restart avahi-daemon
再次测试:
1
ping -c 1 devbox.local
31. Debian 插入 Mac 网线后不能上 Internet
这是典型的默认路由错误。
检查:
1
ip route
如果看到:
1
default ... dev enp5s0
说明 Mac 直连网卡错误获得了默认路由。
修复:
1
2
3
sudo nmcli connection modify mac-direct ipv4.never-default yes
sudo nmcli connection down mac-direct
sudo nmcli connection up mac-direct
再检查:
1
ip route
应该只有第二张网卡提供:
1
default
32. Mac 插入网线后 Internet 出问题
检查 Mac Ethernet 配置。
Mac 的直连 Ethernet 应该:
1
2
3
4
IP: 10.10.10.1
Mask: 255.255.255.0
Router: 空
DNS: 空
如果给 Ethernet 设置了 Router,它可能干扰 Mac 原本的 Internet 路由。
本方案不需要:
- Internet Sharing;
- NAT;
- DHCP Server;
- Bridge;
- 路由转发。
33. SSH 提示 Host Key Changed
如果重装过 Debian,SSH Host Key 会变化。
Mac 可能提示:
1
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
只有在你确认 Debian 确实刚刚重装或重新生成过 Host Key 时,才删除旧记录:
1
ssh-keygen -R devbox.local
以及:
1
ssh-keygen -R 10.10.10.2
然后重新连接。
如果机器没有重装却突然出现 Host Key 改变,应先排查,不要直接忽略安全警告。
34. SSH 连接仍然偶尔掉线
先确认网络本身:
1
ping devbox.local
Debian 查看 NetworkManager:
1
journalctl -u NetworkManager --since "30 min ago"
查看 SSH:
1
journalctl -u ssh --since "30 min ago"
查看物理 link:
1
sudo ethtool enp5s0
如果出现 link up / link down,优先怀疑:
- 网线;
- USB Ethernet Adapter;
- USB Hub;
- 驱动;
- 网卡节能。
ServerAliveInterval 可以帮助 SSH 更快发现失效连接,但无法修复实际物理断链。
35. 如果 Debian 不使用 NetworkManager
不要让多个网络管理器同时管理同一张网卡。
检查:
1
systemctl is-active NetworkManager
如果 Debian 使用传统 ifupdown,可以在:
1
/etc/network/interfaces.d/mac-direct
配置:
1
2
3
4
auto enp5s0
iface enp5s0 inet static
address 10.10.10.2/24
不要添加 gateway。
Internet 接口继续通过 DHCP。
配置完成后应确保该接口没有同时被 NetworkManager 或 systemd-networkd 接管。
36. 推荐的最终日常使用方式
Mac 开发:
1
2
3
4
Xcode
iOS Simulator
Terminal
Browser
Debian:
1
2
3
4
5
6
Docker
PostgreSQL
Redis
Node / Go / Java / Rust / Python
Backend API
编译任务
Mac 日常只记:
1
ssh dev
后端:
1
http://devbox.local:3000
数据库例如:
1
devbox.local:5432
其他服务:
1
devbox.local:<port>
底层始终:
1
2
3
4
5
6
7
devbox.local
│
▼
10.10.10.2
│
▼
Cat6 direct link
37. 最终配置模板
macOS
1
2
3
4
5
6
7
8
Internet:
Wi‑Fi → DHCP → Router
Mac Direct Ethernet:
IP = 10.10.10.1
Mask = 255.255.255.0
Gateway = none
DNS = none
Debian
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Hostname:
devbox
Direct NIC:
Interface = enp5s0
IP = 10.10.10.2/24
Gateway = none
DNS = none
Default = never
Internet NIC:
Interface = wlp4s0 / enp6s0
IP = DHCP
Gateway = DHCP
DNS = DHCP
Default = yes
Avahi
1
2
3
4
[server]
allow-interfaces=enp5s0
use-ipv4=yes
use-ipv6=no
Mac SSH
Host dev
HostName devbox.local
User developer
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 30
ServerAliveCountMax 3
AddKeysToAgent yes
UseKeychain yes
使用:
1
ssh dev
38. 配置完成后的预期行为
| 操作 | 路径 |
|---|---|
ssh dev | Mac Ethernet → Cat6 → Debian |
ping devbox.local | Mac Ethernet → Debian |
curl http://devbox.local:3000 | Mac Ethernet → Debian |
| Mac 浏览网页 | Mac Wi‑Fi → Router → Internet |
Debian apt update | Debian NIC 2 → Router → Internet |
Debian docker pull | Debian NIC 2 → Router → Internet |
| Debian Internet NIC IP 改变 | 不影响 Mac SSH |
| 家庭 Wi‑Fi 波动 | 不影响 Mac ↔ Debian 有线 SSH |
| 路由器 DHCP 更换 Debian LAN IP | 不影响 devbox.local 的直连路径 |
39. 核心结论
这套方案可以理解为建立两张完全不同职责的网络:
1
2
3
4
5
6
7
8
开发控制平面:
Mac ← Cat6 → Debian
10.10.10.1 10.10.10.2
devbox.local
Internet 平面:
Mac → 自己的 Wi‑Fi → Internet
Debian → 自己的 NIC 2 → Internet
最关键的四项配置是:
1
2
3
4
1. Mac direct Ethernet = 10.10.10.1/24,无 Gateway
2. Debian direct NIC = 10.10.10.2/24,无 Gateway
3. Debian Internet NIC = 唯一默认路由
4. Avahi 只发布 direct NIC
最终日常使用不需要记 IP:
1
ssh dev
或者:
1
ssh [email protected]
这是一个稳定、简单、低延迟,并且非常适合 Mac App 开发 + Debian 后端开发的双机架构。
40. 官方参考资料
Apple Support — Use DHCP or a manual IP address on Mac
https://support.apple.com/guide/mac-help/use-dhcp-or-a-manual-ip-address-on-mac-mchlp2718/macApple Support — Find your computer’s name and local hostname / Bonjour
.local
https://support.apple.com/guide/mac-help/find-your-computers-name-and-network-address-mchlp1177/macNetworkManager Reference Manual —
ipv4.never-default
https://www.networkmanager.dev/docs/api/latest/nm-settings-nmcli.htmlDebian Manpages —
avahi-daemon.conf(5)
https://manpages.debian.org/trixie/avahi-daemon/avahi-daemon.conf.5.en.htmlDebian Packages —
avahi-daemon
https://packages.debian.org/trixie/avahi-daemonDebian Packages —
openssh-server
https://packages.debian.org/stable/openssh-server
附:最短部署清单
如果已经理解所有原理,实际部署可以简化成以下流程。
Debian
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 查看接口
nmcli device status
# 示例:enp5s0 专门连接 Mac
sudo nmcli connection add \
type ethernet \
ifname enp5s0 \
con-name mac-direct \
ipv4.method manual \
ipv4.addresses 10.10.10.2/24 \
ipv4.never-default yes \
ipv6.method disabled
sudo nmcli connection modify mac-direct connection.autoconnect yes
sudo nmcli connection up mac-direct
# SSH + mDNS
sudo apt update
sudo apt install openssh-server avahi-daemon avahi-utils
sudo hostnamectl set-hostname devbox
sudo systemctl enable --now ssh
sudo systemctl enable --now avahi-daemon
编辑:
1
sudoedit /etc/avahi/avahi-daemon.conf
在已有 [server] 中:
1
2
3
allow-interfaces=enp5s0
use-ipv4=yes
use-ipv6=no
然后:
1
sudo systemctl restart avahi-daemon
macOS
Ethernet:
1
2
3
4
IP 10.10.10.1
Mask 255.255.255.0
Router empty
DNS empty
测试:
1
2
3
ping -c 1 10.10.10.2
ping -c 1 devbox.local
ssh [email protected]
最后配置:
1
~/.ssh/config
Host dev
HostName devbox.local
User developer
ServerAliveInterval 30
ServerAliveCountMax 3
之后日常只需:
1
ssh dev