我正在尝试为我的 FreeBSD 机器上的网卡添加别名(我想使用监狱)。它运行版本 10.2-RELEASE-p7(通用 amd64 内核)。该机器在 Hyper-V 虚拟机中运行,但我在物理机器上也遇到了同样的情况,唯一的区别是运行相同 10.2 内核的 x86(32 位)版本。
网络接口 hn0 有一个静态 IP 地址:192.168.0.51/24,我的默认路由器是 192.168.0.1。一切正常,直到我添加别名:
ifconfig hn0 inet 192.168.0.200/32 alias
这将在 hn0 上创建别名,如 ifconfig 显示:
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
options=600003<RXCSUM,TXCSUM,RXCSUM_IPV6,TXCSUM_IPV6>
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
inet 127.0.0.1 netmask 0xff000000
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
hn0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=31b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,TSO4,TSO6>
ether 00:15:5d:00:0f:00
inet 192.168.0.51 netmask 0xffffff00 broadcast 192.168.0.255
inet 192.168.0.200 netmask 0xffffffff broadcast 192.168.0.200
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
问题是,一旦我设置了别名,我就无法访问子网之外的任何主机(即使使用主机的 IP 地址)。例如谷歌域名服务器:
ping 8.8.8.8
ping 8.8.8.8 (8.8.8.8): 56 data bytes
但是,我可以使用别名作为源来 ping 任何内容:
ping -S 192.168.0.200 8.8.8.8
PING 8.8.8.8 (8.8.8.8) from 192.168.0.200: 56 data bytes
64 bytes from 8.8.8.8: icmp_seq=0 ttl=56 time=11.137 ms
...
如果别名是在启动Jail时由Jail(8)创建的,则使用该别名的Jail具有网络访问权限,而主机则没有。删除别名后,我必须重新启动服务 netif 和路由才能重新获得主机主 IP 上的网络访问权限。
当监狱运行时,我可以通过 ssh 进入它,也可以使用 IP 别名 ping 它。
基于我无法使用外部节点的 IP ping 通外部节点的事实,我猜测路由有问题。名称解析不起作用,因为我的盒子无法访问 DNS 服务器。这是添加别名之前的 netstat -rn 输出:
Destination Gateway Flags Netif Expire
default 192.168.0.1 UGS hn0
127.0.0.1 link#1 UH lo0
192.168.0.0/24 link#2 U hn0
192.168.0.51 link#2 UHS lo0
创建别名后:
Destination Gateway Flags Netif Expire
default 192.168.0.1 UGS hn0
127.0.0.1 link#1 UH lo0
192.168.0.0/24 link#2 U hn0
192.168.0.51 link#2 UHS lo0
192.168.0.200 link#2 UHS lo0
192.168.0.200/32 link#2 U hn0
IPv6 值被省略,因为我通过添加禁用了 IPv6
ipv6_network_interfaces="none"
ipv6_activate_all_interfaces="NO"
到/etc/rc.conf
我不是网络设置方面的专家,但我已经阅读了我能找到的有关监狱和 IP 别名的所有内容,但没有发现任何有用的内容。也许我忽略了一些微不足道的事情,但我不知道是什么破坏了主机上的网络访问。
答案1
网络掩码太宽,请尝试
ifconfig hn0 inet 192.168.0.200/24 alias
别名通常必须位于同一网络上。