我有一台打印机、树莓派和一台普通路由器
// printer
static ip: 10.0.0.100
subnetmask: 255.255.255.0
default gateway: 192.168.1.1
// raspberry pi /etc/dhcpcd.conf
static ip_address: 10.0.0.10/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1
// router
ip: 192.168.1.1
subnet mask: 255.255.255.0
我将我的树莓派设置为 ip,10.0.0.10
以便它可以与打印机通信。这按预期工作。但是,互联网访问受到限制。树莓派只能访问 Facebook、YouTube 或雅虎等“热门”网站。我不需要它访问所有网站,只需要访问 heroku.com,但它不起作用。为什么会发生这种情况?我该如何让 heroku 可以访问?
来自 pi 的一些可能有用的输出
// ip r
default via 192.168.1.1 devwlan0 src 10.0.0.10 metric 303
10.0.0.0/24 wlan0 proto dhcp scope link src 10.0.0.10 metric 303
192.168.1.1 dev wlan0 scope link src 10.0.0.10 metric 303
// ifconfig
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.10 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 2601:182:cf00:68d0::1 prefixlen 128 scopeid 0x0<global>
inet6 2601:182:cf00:68d0:c5c4:5dc2:223d:23dd prefixlen 64 scopeid 0x0<
我也尝试过更换要使用的 pi static domain_name_servers=8.8.8.8
,但是也没有用。nslookup
它适用于 heroku,但不适用于 curl 和浏览器。
// nslookup heroku.com
Server: 2001:558:feed::1
Address: 2001:558:feed::1#53
Non-authoritative answer:
Name: heroku.com
Address: 50.19.85.154
Name: heroku.com
Address: 50.19.75.132
Name: heroku.com
Address: 50.19.85.156
// /etc/resolv.conf (i didn't edit this file)
nameserver 192.168.1.1
nameserver 2001:558:feed::1
nameserver 2001:558:feed::2
答案1
您很可能通过 IPv6 访问这些网站,而您的 IPv4 配置实际上已完全损坏。
(比较ping -4 www.google.com
和ping -6 www.google.com
。如今,许多网站除了通常的 IPv4 之外还拥有 IPv6 地址,这通常与它们的受欢迎程度无关;通常甚至小型网站也采用 CloudFlare,因为它的所有 CDN 节点都支持 IPv6。)
关于你的 IPv4 网络:它不是技术上不可能有一个子网外网关(至少基于 Linux 的系统可以应对这种情况),但这种情况非常不常见,为了使其正常工作,网关本身必须知道这10.0.0.0/24
是在链接上局域网接口。目前,如果网关不知道这一点,它就无法将任何响应从 WAN 传送回您的打印机或 Pi。
有三种方法可以解决此问题:
在路由器上创建以 10.0.0.0/24 为目的地的静态路由,仅使用 LAN 接口代替路由的网关。
这将允许路由器向 10.0.0.x 发送响应,从而允许打印机和所有其他 10.0.0.x 设备访问互联网。
从两个子网分配路由器的 LAN 接口地址。如果您希望 192.168.1.0/24 和 10.0.0.0/24 在功能上相同,则可以使用此选项。
在某些路由器上,此功能称为“辅助 IP”或“虚拟 IP”(不要与“虚拟服务器”混淆)。有些路由器根本不提供此选项。
这最终实现了与以前的“静态路由”选项相同的目的 - 但更受欢迎,因为它更准确地定义了网络中发生的情况。
从两个子网分配 Raspberry Pi 的
wlan0
接口地址。如果您需要 Pi 访问打印机,则可以选择此选项,但不希望打印机可以访问互联网。在常规 Linux 上,您可以将
ip addr add
两个地址都指向同一个 wlan0 接口,或者interface wlan0 inet static
在 /etc/network/interfaces 中有两个部分。这让 Pi 可以为传出的数据包选择最合适的地址。
答案2
/etc/dhcpcd.conf
所以我尝试了几种不同的设置。仍然不完全理解、/etc/network/interfaces
和文件之间的关系/etc/network/interfaces.d/<some custom file of any name>
,所以我无法解释它为什么有效。任何见解都将不胜感激。我知道它与 NetworkManager 和 Jessie -> Stretch 的更新有关。但这些文件和网络之间发生的事情的详细流程会很有帮助。
我尝试输入值/etc/network/interfaces
,但无论我输入什么值,无论是多个条目还是单个条目,我都会完全失去互联网。
直到我创建了一个/etc/network/interfaces.d/wlan
包含以下内容的文件
auth0 wlan0
iface wlan0 inet static
address 10.0.0.10
gateway 192.168.1.1
netmask 255.255.255.0
我可以访问所有网站和我的打印机。更奇怪的是,ifconfig
使用dhcpcd.conf
vs 使用时的输出/etc/network/interfaces.d/wlan
是完全相同的。