我正在运行一个 Raspbian 客户端,该客户端通过 HTTP 连接到 Raspbian 服务器。服务器上的 Apache 设置为不需要对本地 IP(ip4 和 ip6)进行身份验证。客户端和服务器都连接到单个 FritzBox 路由器。
客户端有多个可用 IP:
wlan0 Link encap:Ethernet HWaddr 80:1f:02:7c:de:8c
inet addr:192.168.0.46 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::821f:2ff:fe7c:de8c/64 Scope:Link
inet6 addr: 2a02:8108:xxxx:xxxx:xxxx:xxxx:xxxx:8a0a/64 Scope:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:389873 errors:0 dropped:1009 overruns:0 frame:0
TX packets:265130 errors:0 dropped:1 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:186117464 (177.4 MiB) TX bytes:35864729 (34.2 MiB)
服务器的 Apache 访问日志显示客户端使用的 IP2a02:8108...
不在允许的本地 IP 范围内。
为什么客户端选择全局 IP 来连接本地子网内,以及这会受到什么影响?
更新
服务器和客户端都在同一个本地网络中,并且都具有链路本地地址:
客户
eth0 Link encap:Ethernet HWaddr b8:27:eb:a9:e8:80
inet addr:192.168.0.48 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::3e43:e197:e064:1be8/64 Scope:Link
inet6 addr: 2a02:8108:9c40:...:1192/64 Scope:Global
服务器
eth0 Link encap:Ethernet HWaddr b8:27:eb:50:df:c6
inet addr:192.168.0.21 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::ba27:ebff:fe50:dfc6/64 Scope:Link
inet6 addr: 2a02:8108:9c40:...:dfc6/64 Scope:Global
服务器 apache 日志
2a02:8108:9c40:...:1dcd:8339 - - [11/Dec/2016:13:30:30 +0000] "GET /middleware.php/capabilities/definitions.json HTTP/1.1" 401 387 "http://keller.fritz.box/frontend/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0"
答案1
地址选择算法描述于https://www.rfc-editor.org/rfc/rfc6724。
除非服务器的地址是链路本地地址 ( fe80:...
),否则客户端使用其全局范围地址作为源地址是正确的。它不会将链路本地源地址与全局目标一起使用。
看看https://www.rfc-editor.org/rfc/rfc6724#section-10.1。它们看起来和你的情况完全吻合。