百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

linux双网卡不能通讯的问题(只能一个地址通)

sinye56 2024-11-24 21:32 2 浏览 0 评论

今天碰到一个问题,一台服务器配置两个网卡,不同的网段,同样客户端和服务器网段为不同网段。拓扑如下:

eth0:172.10.1.2/24 eth1:172.10.2.2/24 主机默认路由为172.10.2.254

客户端:172.4.3.2/24

客户端可以ping通172.10.2.2网段。但是无法ping通172.10.1.2地址。需求是客户端同时可以ping通两个地址。

解决思路:

第一反应就是启用服务器的路由转发功能。

1、启用服务器的路由转发

1.临时开启,(写入内存,在内存中开启)
echo "1" > /proc/sys/net/ipv4/ip_forward
2.永久开启,(写入内核)
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p               ----加载,使得配置文件立即生效
检查:
sysctl -a |grep "ip_forward"

但是启用后仍然ping不通,服务器端抓包如下。

#tcpdump -vv -i eth0 -v icmp -n

发现主机收到了客户端的请求request但是没有回包信息。继续排查正常来说启动路由转发后主机是可以转发路由,通过默认路由将数据转发出去(如果客户端是172.10.2.0网段的访问172.10.1.2是可以正常通讯的)。所以想起了linux的另外一个内核参数rp_filter参数


rp_filter参数用于控制系统是否开启对数据包源地址的校验。
首先看一下Linux内核文档documentation/networking/ip-sysctl.txt中的描述:
rp_filter - INTEGER
0 - No source validation.
1 - Strict mode as defined in RFC3704 Strict Reverse Path
    Each incoming packet is tested against the FIB and if the interface
    is not the best reverse path the packet check will fail.
    By default failed packets are discarded.
2 - Loose mode as defined in RFC3704 Loose Reverse Path
    Each incoming packet's source address is also tested against the FIB
    and if the source address is not reachable via any interface
    the packet check will fail.
  Current recommended practice in RFC3704 is to enable strict mode
to prevent IP spoofing from DDos attacks. If using asymmetric routing
or other complicated routing, then loose mode is recommended.
  The max value from conf/{all,interface}/rp_filter is used
when doing source validation on the {interface}.
  Default value is 0. Note that some distributions enable itin startup scripts.

rp_filter参数用于控制系统是否开启对数据包源地址的校验,即rp_filter参数有三个值,0、1、2,具体含义:

0:不开启源地址校验。

1:开启严格的反向路径校验。对每个进来的数据包,校验其反向路径是否是最佳路径。如果反向路径不是最佳路径,则直接丢弃该数据包。(我的centos7.9默认值为1)

2:开启松散的反向路径校验。对每个进来的数据包,校验其源地址是否可达,即反向路径是否能通(通过任意网口),如果反向路径不同,则直接丢弃该数据包。

所以这也便解释的通为啥同网段的可以ping通eth0地址,而跨网段的不能通讯了。

2、关闭rp_filter参数

临时生效

# echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter 
# echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter 
# echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter

永久生效

cat /etc/sysctl.conf  写入到sysctl.conf配置文件
net.ipv4.ip_forward = 1
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.eth0.rp_filter = 0
net.ipv4.conf.eth1.rp_filter = 0
net.ipv4.conf.lo.rp_filter = 0
sysctl -p
#如果不生效需要重启主机。

检查是否生效

再次使用客户端ping测试,两个地址均能ping通了。抓包如下

#tcpdump -vv -i eth0 -v icmp -n 服务器通过eth0口接收到了ping请求

#tcpdump -vv -i eth1 -v icmp -n 服务器通过eth1口进行了回复

至此此问题算是解决了。

开启rp_filter参数的作用

1. 减少DDoS攻击

校验数据包的反向路径,如果反向路径不合适,则直接丢弃数据包,避免过多的无效连接消耗系统资源。

2. 防止IP Spoofing

校验数据包的反向路径,如果客户端伪造的源IP地址对应的反向路径不在路由表中,或者反向路径不是最佳路径,则直接丢弃数据包,不会向伪造IP的客户端回复响应。

相关推荐

RHEL8和CentOS8怎么重启网络

本文主要讲解如何重启RHEL8或者CentOS8网络以及如何解决RHEL8和CentOS8系统的网络管理服务报错,当我们安装好RHEL8或者CentOS8,重启启动网络时,会出现以下报错:...

Linux 内、外网双网卡路由配置

1.路由信息的影响Linux系统中如果有多张网卡的情况下,如果路由信息配置不正确,...

Linux——centos7修改网卡名

修改网卡名这个操作可能平时用不太上,可作为了解。修改网卡默认名从ens33改成eth01.首先修改网卡配置文件名(建议将原配置文件进行备份)...

CentOS7下修改网卡名称为ethX的操作方法

?Linux操作系统的网卡设备的传统命名方式是eth0、eth1、eth2等,而CentOS7提供了不同的命名规则,默认是基于固件、拓扑、位置信息来分配。这样做的优点是命名全自动的、可预知的...

Linux 网卡名称enss33修改为eth0

一、CentOS修改/etc/sysconfig/grub文件(修改前先备份)为GRUB_CMDLINE_LINUX变量增加2个参数(net.ifnames=0biosdevname=0),修改完成...

CentOS下双网卡绑定,实现带宽飞速

方式一1.新建/etc/sysconfig/network-scripts/ifcfg-bond0文件DEVICE=bond0IPADDR=191.3.60.1NETMASK=255.255.2...

linux 双网卡双网段设置路由转发

背景网络情况linux双网卡:网卡A(ens3)和网卡B(...

Linux-VMware设置网卡保持激活

Linux系统只有在激活网卡的状态下才能去连接网络,进行网络通讯。修改配置文件(永久激活网卡)...

VMware虚拟机三种网络模式

01.VMware虚拟机三种网络模式由于linux目前很热门,越来越多的人在学习linux,但是买一台服务放家里来学习,实在是很浪费。那么如何解决这个问题?虚拟机软件是很好的选择,常用的虚拟机软件有v...

Rocky Linux 9/CentOS Stream 9修改网卡配置/自动修改主机名(实操)

推荐...

2023年最新版 linux克隆虚拟机 解决网卡uuid重复问题

问题描述1、克隆了虚拟机,两台虚拟机里面的ip以及网卡的uuid都是一样的2、ip好改,但是uuid如何改呢?解决问题1、每台主机应该保证网卡的UUID是唯一的,避免后面网络通信有问题...

Linux网卡的Vlan配置,你可能不了解的玩法

如果服务器上连的交换机端口已经预先设置了TRUNK,并允许特定的VLAN可以通过,那么服务器的网卡在配置时就必须指定所属的VLAN,否则就不通了,这种情形在虚拟化部署时较常见。例如在一个办公环境中,办...

Centos7 网卡绑定

1、切换到指定目录#备份网卡数据cd/etc/sysconfig/network-scriptscpifcfg-enp5s0f0ifcfg-enp5s0f0.bak...

Linux搭建nginx+keepalived 高可用(主备+双主模式)

一:keepalived简介反向代理及负载均衡参考:...

Linux下Route 路由指令使用详解

linuxroute命令用于显示和操作IP路由表。要实现两个不同子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现。在Linux系统中,设置路由通常是为了解决以下问题:该...

取消回复欢迎 发表评论: