如何对虚拟接口进行 NAT

如何对虚拟接口进行 NAT

我在 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 种;

  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公共地址在哪里

  2. 但是如果我为接口设置一些疯狂的 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
    

相关内容