rp_filter导致的网络异常

问题背景如下:

1,公司内网到某机房公网不通(ping,traceroute,curl都不行)

2,在某机房此公网的机器到公司内网也不通(ping,traceroute,curl都不行)

3,但是某机房此公网哪个的机器可以通过网关通外网,并且外网环境也能访问某机房公网ip,只有公司内网到这些ip不同。

4,公司内网到其它几个机房的公网都没问题

公司内网到某机房公网不通的traceroute结果:

$ traceroute x.x.x.x
traceroute  to x.x.x.x (x.x.x.x), 30 hops max, 60 byte  packets
 1  * * *
 2  10.x.253.1  (10.x.253.1)  7.092 ms  7.388 ms  7.384 ms
 3   10.x.2.2 (10.x.2.2)  7.372 ms  7.615 ms  8.347  ms
 4  10.x.1.2 (10.x.1.2)  7.595 ms  8.335  ms  8.331 ms
 5  192.x.168.254  (192.x.168.254)  8.879 ms  9.325 ms  10.077  ms
 6  * * *
 ......

30  * * *

公司内网到其它机房公网正常的traceroute结果:

$ traceroute xx.xx.xx.xx
traceroute  toxx.xx.xx.xx (xx.xx.xx.xx), 30 hops max, 60 byte  packets
 1  * * *
 2  10.x.253.1  (10.x.253.1)  7.092 ms  7.388 ms  7.384 ms
 3   10.x.2.2 (10.x.2.2)  7.372 ms  7.615 ms  8.347  ms
 4  10.x.1.2 (10.x.1.2)  7.595 ms  8.335  ms  8.331 ms

5  * * *

6  111.111.111.111  (111.111.111.111)  8.879 ms  9.325 ms  10.077  ms
 7  * * *

8 xx.xx.xx.xx

问题分析解决步骤:(发现这个问题之后,感觉和奇怪,虽然不影响服务,但是好奇心还是驱使着想把问题搞清楚)

一,分析了一下某机房机器的路由,都正常没有发现异常

二,我测试了某机房和其它机房之间的网络,外网到某机房的网络都是正常的。第一个怀疑对象就是觉得公司内网有限制,因为看traceroute结果,数据包还没有出公司内网。所以,就和公司IT部门排查了一番,发现并没有任何限制

三,然后,怀疑公司机房是否有相关限制呢。所以,又找网络组查了一番,结果仍然是没有任何限制

四,排除外部因素之后,就怀疑可能是系统有问题了。并且,通过在某机房的外网机器上抓包能抓到公司内网送达的traceroute包,只是某机房的机器没有回复数据包,那就更确定是系统本身的问题了。通过强大的google发现了rp_filter这个参数导致了这个问题,因为我们某机房机器此参数为1.

rp_filter参数的作用:

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 it
	in startup scripts.

置为1的作用为:数据包从哪个网口进来从哪个网口出去,如果不匹配 丢弃。

结论:

公司内网到某机房机器的request数据包从公网网卡进入,而reply的数据包根据机器的路由规则则从某机房机器的内网网卡流出。而某机房机器rp_filter为1,从而导致数据包被系统丢弃。而rp_filter这个参数默认是0,由于历史原因被调整成了1,我们重新把管理的所有机器都调整为了默认值以解决类似问题。

时间: 2024-10-02 00:42:28

rp_filter导致的网络异常的相关文章

记录一次ARP故障导致网络异常

故障现象:单位某台PC出现无法打印故障,提示为下图 该PC重新设置打印机就能够使用但在重启之后无法连接到打印机,并且还会出现连接共享文件的时候会出现类似掉线的情况 分析过程:打印机为网络打印机 内存使用率仅有10% 所以排除1和3 剩下围绕着2的提示来解决 实践过程: 先从网络方面下手,利用IMCP的PING功能对打印服务器,打印机本身进行测试,结果为能PING通. 注!此时发现一个问题,服务器以及其他PC无法PING通本PC! 针对上述所说的故障对本PC进行了网卡驱动更新,系统重装,甚至更换网

Windows和Linux环境,网络异常模拟测试方法【转载自光荣之路微信公众号】

1.网络异常的分类 在系统的运行过程中,可能会遇到各种各样的网络问题,其中主要可能出现的问题有 网络延迟:当网络信息流过大时,可能导致设备反应缓慢,造成数据传输延迟: 网路掉包:网路掉包是在数据传输的过程中,数据包由于各种原因在信道中丢失的现象: 网络节流:当数据传输量达到网络带宽上限时,数据包可能会被设备拦截下来在之后发出: 网络重发:当网络不稳定是可能会导致发送端判断数据包丢失导致部分数据包重发: 数据乱序:当数据传输有可能出现数据包到达接收端时间不一致,导致数据包乱序问题: 数据篡改:数据

YS VTM模块存在格式化字符串漏洞,可导致VTM进程异常退出【高危】

YS VTM模块存在格式化字符串漏洞,可导致VTM进程异常退出[高危] 问题描述:          YS VTM模块开放对外监听端口(8554和8664),此次使用sulley fuzzing框架对监听在8664端口的私有二进制协议进行测试,以检测可能发生的各种问题.在该协议中,客户端会向8664端口发送一个二进制+文本格式的报文,对该报文格式的各个字段进行fuzzing,发现当向服务端的VTM进程传入格式化字符串时会崩溃并退出. 测试步骤: 1.  分别在客户机和服务器安装sulley fu

SQL Server事务遭遇网络异常时的处理机制浅析

SQL Server数据库中,如果应用程序正在执行一个事务的时候突然遭遇了网络异常,例如网络掉包,网络中断等,那么这个事务会怎么样? SQL Server数据库是通过什么机制来判断处理呢? 估计很多人跟我一样都有不少疑问, 我们下面构造一个测试实验来测试验证一下.如下所示: 步骤1:在客户端连使用SSMS工具连接到测试数据库,执行下面脚本,显性事务既不提交也不回滚.模拟事务正在执行当中. USE AdventureWorks2012; GO SELECT @@SPID; BEGIN TRAN D

99%的程序都没有考虑的网络异常?使用Fundebug.notify()主动上报

近日看到一篇文章99%的程序都没有考虑的网络异常,开篇提到: 绝大多数程序只考虑了接口正常工作的场景,而用户在使用我们的产品时遇到的各类异常,全都丢在看似 ok 的 try catch 中.如果没有做好异常的兼容和兜底处理,会极大的影响用户体验,严重的还会带来安全和资损风险. 于是,笔者分析了 GitHub 上的一些开源微信小程序,发现大多数的代码异常处理确实是不够的. 登录接口只考虑成功的情况,没考虑失败的情况 //调用登录接口 wx.login({ success: function() {

Android的debug.keystore拒绝访问导致的生成异常及解决方案

构建Android应用程序的时候输出异常:[apkbuilder] keytool 错误: java.io.FileNotFoundException: C:\Users\my\.android\debug.keystore(拒绝访问.)导致BUILD FAILED. 异常原因: Android要求所有的应用程序必须有签名,否则就不会安装该程序.而在我们开发过程中,默认生成和使用debug.keystore(所以平时根本不会注意有这么个玩意),debug.keystore默认有效期为一年,换句话

Android连接网络异常:android.os.NetworkOnMainThreadException

package com.ccl.getimage; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android

Android主线程不能访问网络异常解决办法

从两个方面说下这个问题: 1. 不让访问网络的原因 2. 解决该问题的办法 不让访问网络的原因: 由于对于网络状况的不可预见性,很有可能在网络访问的时候造成阻塞,那么这样一来我们的主线程UI线程 就会出现假死的现象,产生很不好的用户体验.所以,默认的情况下如果直接在主线程中访问就报出了这个异常,名字是NetworkOnMainThreadException 解决该问题的办法 1. 独立线程 2. 异步线程AsyncTask 3. StrictMode修改默认的策略 1) 独立线程的办法 启动一个

网络异常检测

网络异常检查 2 作者 CppLive | 发表于 2012-02-17 文章分类 : C语言, Linux, Windows, 应用与编程, 网络 标签: Android, iPhone, Linux, Windows, 套接字, 路由 一.本文目的 在涉及网络编程的实际项目应用中,由于网络不可能一直处于理想状态,TCP长连接也可能随时正常或异常地断开,如果不予处理,那么就可能因此而给程序带来很多潜在的问题. 编写该文档的目的就在于针对网络程序中可能遇到的各种问题,拿出来与大家探讨一下具体问题