OS X从Android 7.1.1获双公网IPv6,如何固定地址用于SSH?
解决OS X通过Android 7.1.1获取公网IP用于SSH的问题
我来帮你梳理下解决思路,结合OS X和Android 7.1.1的网络特性,分两种核心方案来处理你的需求:
方案一:用永久地址绑定SSH(优先稳定)
你提到的「永久地址」应该是基于网卡硬件标识生成的IPv6稳定地址,虽然前缀会随移动网络变更,但地址的后缀是固定的。我们可以让OS X强制使用这个地址,再配合动态DNS解决前缀变化的问题。
1. 禁用OS X的IPv6临时隐私地址
临时地址是OS X默认开启的隐私保护机制,休眠唤醒后会自动更换。我们可以关闭对应网络接口的这个功能:
- 先打开终端,执行以下命令找到Android共享网络对应的接口名称(比如
en2、usb0这类,找带有inet6地址的接口):ifconfig - 假设目标接口是
en2,执行命令禁用临时地址:sudo sysctl -w net.inet6.conf.en2.use_tempaddr=0 - 要让设置重启后依然生效,编辑
/etc/sysctl.conf文件(没有的话直接创建):
添加一行配置:sudo nano /etc/sysctl.conf
按net.inet6.conf.en2.use_tempaddr=0Ctrl+O保存,回车确认,再按Ctrl+X退出编辑器。
2. 用动态DNS(DDNS)适配前缀变化
移动网络的IPv6前缀可能随时变更,这时候需要DDNS自动同步当前的永久地址到域名:
- 用Homebrew安装轻量的DDNS客户端
ddclient:brew install ddclient - 编辑配置文件
/usr/local/etc/ddclient.conf,根据你的域名服务商(比如Cloudflare、No-IP)的文档填写参数,核心是让客户端抓取你永久IPv6地址的当前值,自动更新DNS记录。这样不管前缀怎么变,你都能通过域名连接SSH。
方案二:延长临时地址有效期(保留隐私特性)
如果不想放弃临时地址的隐私保护,我们可以延长它的有效期,避免休眠唤醒就失效:
1. 查看当前临时地址的有效期参数
终端执行以下命令,查看临时地址的偏好有效期和总有效期(单位:秒):
sysctl net.inet6.conf.all.temp_valid_lft net.inet6.conf.all.temp_prefered_lft
2. 修改有效期为更长时间
比如设置为7天(604800秒),执行命令:
sudo sysctl -w net.inet6.conf.all.temp_prefered_lft=604800 sudo sysctl -w net.inet6.conf.all.temp_valid_lft=604800
3. 永久生效设置
同样把配置添加到/etc/sysctl.conf:
net.inet6.conf.all.temp_prefered_lft=604800 net.inet6.conf.all.temp_valid_lft=604800
注意:即使延长了有效期,当移动网络重新分配/64前缀时,临时地址还是会更换,所以依然需要配合DDNS来保证SSH连接的可用性。
额外说明:Android端的限制
Android 7.1.1的网络共享功能没有公开的设置项来调整IPv6地址策略。如果你的设备已经root,可以尝试修改系统的sysctl参数强制禁用临时地址,但操作风险较高,不推荐普通用户尝试。
内容的提问来源于stack exchange,提问作者cnst




