我的本地计算机(10.0.0.2/16
)直接连接到我服务器的eth4
网络接口。
连接按预期工作,我可以跟踪eth4
的IP,即10.0.0.1
。
但是,我还可以追踪 另一个界面(10.1.0.23
)的IP eth5
,即使它位于错误的子网上!
在下面您将看到我本地计算机和服务器的设置。
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
我的/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
答案 0 :(得分:0)
为什么你不期望这种行为。从Debian服务器的路由表中可以看出,它知道如何将数据包路由到您的arch linux机器,因此它可以响应。 我可以看到你可能遇到的两个问题:
您没有向我们提供您的防火墙规则,或者告诉我们您的服务器是否启用了ip_forwarding。即使没有启用IP转发,Linux也会将本地接收的任何本地地址数据包视为INPUT数据包(就iptables和访问控制决策而言),而不是转发数据包。因此,即使禁用转发,它也会响应。 如果您不想要这种行为,可以在INPUT链中添加一个iptables规则,以丢弃在服务器上收到的数据包。
您可能希望为了响应数据包需要遍历(转发),因此您将在traceroute中获得两个跃点,一个用于eth4,一个用于eth5。但是,如上所述,如果任何本地接收的ppacket与本地IP之一匹配,则将其视为输入。您的arch linux box可能使用Debian服务器作为其默认路由。因此,它发送一个包含Debian服务器MAC地址的数据包,希望Debian服务器转发它。这使得它成为Debian serevr上以太网级别的本地接收数据包。服务器然后找到IP地址,发现它是本地的,不关心它是另一个以太网,并在IP层本地接收它。 如果您不想要这种行为,请修复防火墙规则。