我在 Ubuntu 中创建了一个虚拟接口,内容如下:
sudo ifconfig eth0:0 192.168.1.99 netmask 255.255.255.0 up
现在我需要能够从新的虚拟接口进行 ping 操作。
ping -I 192.168.1.99 www.google.co.in
我无法做到这一点。我已启用 IP 转发。
答案1
该ping -I
选项应该可以正常工作,我可能弄错了,但它在下面的示例中开箱即用,而且我没有启用转发。你能提供你的ifconfig
输出吗netstat -r
?
通常,源 IP 会根据网络接口设置为适合目标地址的路由,因此如果eth0:0
它也是适合接口的 IP,那么您最终会得到以下两种可能性中的 1 种;
例如,如果我的 IP 地址是 192.168.1.72,那么;
# ifconfig eth0 Link encap:Ethernet HWaddr 00:04:4B:16:BA:41 inet addr:192.168.1.72 Bcast:192.168.1.255 Mask:255.255.255.0
我添加了另一个 IP 地址,就像您的命令一样;
ifconfig eth0:0 192.168.1.99 netmask 255.255.255.0 up
那么我最终会得到以下结果
# ifconfig eth0 Link encap:Ethernet HWaddr 00:04:4B:16:BA:41 inet addr:192.168.1.72 Bcast:192.168.1.255 Mask:255.255.255.0 eth0:0 Link encap:Ethernet HWaddr 00:04:4B:16:BA:41 inet addr:192.168.1.99 Bcast:192.168.1.255 Mask:255.255.255.0
所以我可以使用绑定到 eth0 接口的默认 IP 进行 ping 操作;
ping -I 192.168.1.72 myremote.host.com echo request... echo reply....
或新的;
ping -I 192.168.1.99 myremote.host.com echo request... echo reply....
但是因为 192.168.1.xx 都是位于 NAT 连接后面的本地地址,所以远程主机只能
myremote.host.com
看到您的外部 IP,而看不到192.168.1.72
:20:24:21.452732 IP 87.19.24.187 > 123.123.123.123: ICMP echo request, id 49711, seq 6, length 64 20:24:21.452757 IP 123.123.123.123 > 87.19.24.187: ICMP echo reply, id 49711, seq 6, length 64
87.19.24.187
公共地址在哪里但是如果我为接口设置一些疯狂的 IP 地址,如下所示;
ifconfig eth0:2 192.192.7.99 netmask 255.255.255.0 up
我的远程主机看到了 ping,但是客户端从未收到回复;
# tcpdump -nn icmp and host xxx tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes 20:25:01.165321 IP xxx > yyy: ICMP echo request, id 49730, seq 1, length 64 20:25:01.165349 IP yyy > xxx: ICMP echo reply, id 49730, seq 1, length 64