我安装了 CentOS 6,有 1 个网卡,eth0,运行正常
我添加了另一个 NIC。eth1
两个 NIC 都位于同一个交换机和同一个 LAN 上。
我将其复制ifcfg-eth0
到ifcfg-eth1
,然后简单地更改了DEVICE=
、IPADDR=
和HWADDR=
行。
设置完成后/etc/sysconfig/network-scripts/ifcfg-eth1
,我可以eth1
从外部机器 ping 一整天,一切正常。
但是如果我尝试从服务器内部 ping (ping -Ieth1 google.com
),则不会收到任何响应,而ping -Ieth0 google.com
工作正常。
我已从和中删除了行GATEWAY=
,并添加了。ifcfg-eth0
ifcfg-eth1
GATEWAY=
/etc/sysconfig/network
这是我的混淆配置文件:
eth0
DEVICE=eth0
BOOTPROTO=静态
IPADDR=192.168.1.40
NETMASK=255.255.255.0
HWADDR=00:00:23:45:67:8F
NM_CONTROLLED=
否 ONBOOT=是
TYPE=以太网
IPV6INIT=否
DNS1=192.168.1.240
DNS2=192.168.1.244
eth1
DEVICE=eth1
BOOTPROTO=静态
IPADDR=192.168.1.41
NETMASK=255.255.255.0
HWADDR=00:00:23:45:67:99
NM_CONTROLLED=
否 ONBOOT=是
TYPE=以太网
IPV6INIT=否
DNS1=192.168.1.240
DNS2=192.168.1.244
网络
NETWORKING_IPV6=否
HOSTNAME=我的服务器
NETWORKING=是
GATEWAY=192.168.1.2
我的iptables -L -v
目前完全是空的。而且我没有使用 SELinux。
答案1
永远不要将两个接口设置为同一个子网,这可能不会按预期工作。如果您检查 的输出ip ro
,您会明白 Linux 主要基于基于目的地的路由。尽管基于源的路由是可能的,实际上很少这样做。无论出于什么原因,我一生中只记得有一次需要这样做。
你误解ping -I
了什么,因此造成了混乱。来自 man:
-I 接口地址
Set source address to specified interface address.
Ping 不会通过 -I 接口发送数据包。当数据包准备发送时,内核会查看目标 IP和ip ro
,并根据这两点决定使用哪个接口。它不考虑数据包的源 IP。
-I 用于设置数据包的源 IP。当数据包流出时,交换机知道您的两个 IP 都来自 eth0 的 MAC,因此它会将响应发送到那里。但 eth0 会丢弃所有未寻址到其自身 IP(或广播)的内容。除了您在 中看到的内容之外,eth0 和 eht1 之间没有“神奇的内部桥接”。ip ro
因此答案永远不会到达 eth1。
是ip ro
已弃用的 的现代替代品route
。
由于您使用相同的交换机/网关,您可能希望粘合eth0 和 eth1。然后在 bond0 接口 (ifcfg-bond0) 上设置两个 IP 地址。这是标准做法,效果很好。
为了完全分离 eth0 和 eth1 之间的流量,最好将 eth1 设置为不同的 IP 子网,例如 192.168.2.40,并使用不同的路由器/网关:)
答案2
net.ipv4.conf.default.rp_filter = 2
net.ipv4.conf.all.rp_filter = 2
答案3
丹尼尔-
您的问题似乎是由于预期配置的限制而存在的。您在同一个 LAN/子网上有两个接口,但其中一个必须是默认路由。运行此命令以验证您的路由是否默认为 eth0,这将表明当您尝试强制通过 eth1 进行流量传输时,您将无法访问网络外部的任何设备。
route
它看起来应该是这样的:
内核 IP 路由表 目标网关 Genmask 标志 度量参考 使用 Iface
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
本地链路 * 255.255.0.0 U 1002 0 0 eth0
默认 192.168.1.0 0.0.0.0 UG 0 0 0 eth0
为了进行健全性检查,请尝试通过该端口 ping 一下 LAN 本地的某些设备:
ping -Ieth1 192.168.1.2