dnspod-shell
dnspod-shell copied to clipboard
Implement support for retrieving host ip from a specific interface
这个PR为arDdnsCheck
添加了第4个参数:接口名。通过arDdnsCheck $domain $subdomain 6 $dev
或arDdnsCheck $domain $subdomain 4 $dev
,我们可以限定在指定的接口$dev
上查询一个IPv6地址或IPv4地址。
该参数将解决以下需求:
- IPv4:双WAN双公网配置时,选择其中一个网卡更新IP(或调用两次更新到不同域名上,再借助CNAME做线路分流),如https://github.com/rehiy/dnspod-shell/issues/46 。
- IPv6:除了双WAN之外,在一个网卡上会有多个IPv6地址(稳定的+临时的)。DDNS一般来说是使用于服务端,IPv6地址应以稳定而非频繁变动为好,但
ip route get
与外网查询则常常更偏向于使用临时地址(因为是作为客户端去访问出口服务)。因此$dev
参数对应的查询规则,可以设计为优先偏向于静态的稳定地址,当无法查询到时才回退到临时地址。 - 为内部网络更新域名(如指定一个TUN/TAP接口)
该PR引入的第4个参数实际上是在为下一个PR引入的第5个参数(MAC地址)作铺垫:通过给定一个指定的网卡接口与一个指定的MAC地址,获取该网卡链路上该MAC地址对应设备的IPv6地址并更新到DDNS。
届时,dnspod-shell
将支持的参数组合如下:
-
$domain $subdomain [4|6]
: 查询用作默认出口的地址(偏向于使用临时地址), 调用arWanIp4
或arWanIP6
; -
$domain $subdomain [4|6] $dev
: 查询某个接口$dev
上的公网地址(偏向非临时的稳定地址)调用arDevIp4
或arDevIP6
; -
$domain $subdomain 6 $dev $mac
: 查询接口$dev
上的局域网内某个设备$mac
的IPV6地址。调用arLinkIp6
。