这可能会让您感到惊讶,但 iproute2 已经配置好了! 当前的命令 ifconfig 和 route 已经在使用高级系统调用,但大多使用非常默认(即,乏味)的设置。
The ip 工具是核心,我们将要求它为我们显示我们的接口。
[ahu@home ahu]$ ip link list 1: lo: <LOOPBACK,UP> mtu 3924 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: dummy: <BROADCAST,NOARP> mtu 1500 qdisc noop link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff 3: eth0: <BROADCAST,MULTICAST,PROMISC,UP> mtu 1400 qdisc pfifo_fast qlen 100 link/ether 48:54:e8:2a:47:16 brd ff:ff:ff:ff:ff:ff 4: eth1: <BROADCAST,MULTICAST,PROMISC,UP> mtu 1500 qdisc pfifo_fast qlen 100 link/ether 00:e0:4c:39:24:78 brd ff:ff:ff:ff:ff:ff 3764: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP> mtu 1492 qdisc pfifo_fast qlen 10 link/ppp |
您的结果可能会有所不同,但这是它在我的家用 NAT 路由器上显示的内容。 我只会解释部分输出,因为并非所有内容都直接相关。
我们首先看到环回接口。 虽然您的计算机可能在没有环回接口的情况下也能在某种程度上运行,但我建议不要这样做。 MTU 大小(最大传输单元)为 3924 字节,并且不应该排队。 这很合理,因为环回接口只是您内核想象的产物。
我现在将跳过 dummy 接口,它可能不会在您的计算机上出现。 然后是我的两个物理网络接口,一个连接到我的有线调制解调器,另一个服务于我的家庭以太网段。 此外,我们看到了 ppp0 接口。
请注意 IP 地址的缺失。 iproute 断开了“链接”和“IP 地址”的概念。 随着 IP 别名技术的发展,“the” IP 地址的概念无论如何都变得相当不相关了。
但它确实向我们展示了 MAC 地址,即我们以太网接口的硬件标识符。
[ahu@home ahu]$ ip address show 1: lo: <LOOPBACK,UP> mtu 3924 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 brd 127.255.255.255 scope host lo 2: dummy: <BROADCAST,NOARP> mtu 1500 qdisc noop link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff 3: eth0: <BROADCAST,MULTICAST,PROMISC,UP> mtu 1400 qdisc pfifo_fast qlen 100 link/ether 48:54:e8:2a:47:16 brd ff:ff:ff:ff:ff:ff inet 10.0.0.1/8 brd 10.255.255.255 scope global eth0 4: eth1: <BROADCAST,MULTICAST,PROMISC,UP> mtu 1500 qdisc pfifo_fast qlen 100 link/ether 00:e0:4c:39:24:78 brd ff:ff:ff:ff:ff:ff 3764: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP> mtu 1492 qdisc pfifo_fast qlen 10 link/ppp inet 212.64.94.251 peer 212.64.94.1/32 scope global ppp0 |
这包含更多信息。 它显示了我们所有的地址,以及它们属于哪个网卡。 “inet”代表 Internet (IPv4)。 还有许多其他地址族,但这些目前与我们无关。
让我们更仔细地检查一下 eth0。 它说它与 inet 地址 “10.0.0.1/8” 相关。 这是什么意思? /8 代表网络地址中的位数。 总共有 32 位,所以我们还剩下 24 位是我们网络的一部分。 10.0.0.1 的前 8 位对应于 10.0.0.0,我们的网络地址,而我们的网络掩码是 255.0.0.0。
其他位连接到此接口,因此 10.250.3.13 可以直接在 eth0 上访问,例如 10.0.0.1 也是如此。
对于 ppp0,概念相同,尽管数字不同。 它的地址是 212.64.94.251,没有子网掩码。 这意味着我们有一个点对点连接,除了 212.64.94.251 之外的每个地址都是远程的。 但是,还有更多信息。 它告诉我们,在链路的另一端,仍然只有一个地址,212.64.94.1。 /32 告诉我们没有“网络位”。
您务必理解这些概念。 如果您有困难,请参考本 HOWTO 开头提到的文档。
您可能还会注意到 “qdisc”,它代表 Queueing Discipline(排队规则)。 这将在稍后变得至关重要。
好了,我们现在知道如何找到 10.x.y.z 地址,并且我们能够到达 212.64.94.1。 然而,这还不够,所以我们需要关于如何连接到互联网的说明。 互联网可以通过我们的 ppp 连接访问,并且 212.64.94.1 似乎愿意将我们的数据包传播到世界各地,并将结果返回给我们。
[ahu@home ahu]$ ip route show 212.64.94.1 dev ppp0 proto kernel scope link src 212.64.94.251 10.0.0.0/8 dev eth0 proto kernel scope link src 10.0.0.1 127.0.0.0/8 dev lo scope link default via 212.64.94.1 dev ppp0 |
这几乎是不言自明的。 输出的前 4 行明确说明了 ip address show 已经暗示的内容,最后一行告诉我们,世界的其他地方可以通过 212.64.94.1(我们的默认网关)找到。 我们可以看到它是一个网关,因为 “via” 这个词告诉我们,我们需要将数据包发送到 212.64.94.1,它会处理剩下的事情。
作为参考,这是旧的 route 实用程序向我们展示的内容
[ahu@home ahu]$ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 212.64.94.1 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0 10.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 eth0 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo 0.0.0.0 212.64.94.1 0.0.0.0 UG 0 0 0 ppp0 |