为什么我可以ping我服务器的不同网络接口的IP?

时间:2017-05-20 19:28:07

标签: networking debian ip ping network-interface

我的本​​地计算机(10.0.0.2/16)直接连接到我服务器的eth4网络接口。 连接按预期工作,我可以跟踪eth4的IP,即10.0.0.1。 但是,我还可以追踪 另一个界面10.1.0.23)的IP eth5,即使它位于错误的子网上!

在下面您将看到我本地计算机和服务器的设置。

在我的本地计算机(Arch Linux)

ip addr的输出:

....
2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 3c:97:0e:8a:a1:5a brd ff:ff:ff:ff:ff:ff
inet 10.0.0.2/16 brd 10.0.255.255 scope global enp0s25
   valid_lft forever preferred_lft forever
inet6 fe80::7a0b:adb3:2eef:a3a8/64 scope link 
   valid_lft forever preferred_lft forever
....

路由跟踪

% sudo traceroute -I 10.0.0.1
traceroute to 10.0.0.1 (10.0.0.1), 30 hops max, 60 byte packets
 1  10.0.0.1 (10.0.0.1)  0.184 ms  0.170 ms  0.163 ms

% sudo traceroute -I 10.1.0.23
traceroute to 10.1.0.23 (10.1.0.23), 30 hops max, 60 byte packets
 1  10.1.0.23 (10.1.0.23)  0.240 ms  0.169 ms  0.166 ms

在服务器上(Debian)

我的/etc/network/interfaces

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
#iface eth5 inet dhcp
auto eth5
allow-hotplug eth5
iface eth5 inet static
    address 10.1.0.23 
    netmask 255.255.0.0  
    gateway 10.1.0.1


## Automatically load eth4 interface at boot 
auto eth4  
allow-hotplug eth4
# Configure network interface at eth4 
iface eth4 inet static
    address 10.0.0.1 
    netmask 255.255.0.0  
    gateway 10.0.0.1

ip addr的输出:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
...
6: eth4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:08:a2:0a:e8:86 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.1/16 brd 10.0.255.255 scope global eth4
       valid_lft forever preferred_lft forever
    inet6 fe80::208:a2ff:fe0a:e886/64 scope link 
       valid_lft forever preferred_lft forever
7: eth5: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether 00:08:a2:0a:e8:87 brd ff:ff:ff:ff:ff:ff
    inet 10.1.0.23/16 brd 10.1.255.255 scope global eth5
       valid_lft forever preferred_lft forever

ip route的输出:

default via 10.1.0.1 dev eth5 
10.0.0.0/16 dev eth4  proto kernel  scope link  src 10.0.0.1 
10.1.0.0/16 dev eth5  proto kernel  scope link  src 10.1.0.23 

1 个答案:

答案 0 :(得分:0)

为什么你不期望这种行为。从Debian服务器的路由表中可以看出,它知道如何将数据包路由到您的arch linux机器,因此它可以响应。 我可以看到你可能遇到的两个问题:

  • 为什么选择回复?

您没有向我们提供您的防火墙规则,或者告诉我们您的服务器是否启用了ip_forwarding。即使没有启用IP转发,Linux也会将本地接收的任何本地地址数据包视为INPUT数据包(就iptables和访问控制决策而言),而不是转发数据包。因此,即使禁用转发,它也会响应。 如果您不想要这种行为,可以在INPUT链中添加一个iptables规则,以丢弃在服务器上收到的数据包。

  • 为什么traceroute中只有一跳

您可能希望为了响应数据包需要遍历(转发),因此您将在traceroute中获得两个跃点,一个用于eth4,一个用于eth5。但是,如上所述,如果任何本地接收的ppacket与本地IP之一匹配,则将其视为输入。您的arch linux box可能使用Debian服务器作为其默认路由。因此,它发送一个包含Debian服务器MAC地址的数据包,希望Debian服务器转发它。这使得它成为Debian serevr上以太网级别的本地接收数据包。服务器然后找到IP地址,发现它是本地的,不关心它是另一个以太网,并在IP层本地接收它。 如果您不想要这种行为,请修复防火墙规则。