Linux网桥端口的arp问题

简介:
Linux的brctl addif命令可以将一个接口加入到既有的网桥中,接下来,这个接口就成了brport,属于一个从属的接口,然而你还是可以看到它的,并且可以为它添加IP地址,然后route命令会显示出它的新添加的IP地址的链路层路由已经生效,种种迹象都让人觉得这个brport仍然保有IP语义,然而如果此时你使用该IP(Linux内核会做源地址选择)去访问同一网段的其它地址的话,就会发现,不通,反过来从其它同一网段的地址访问该地址也是不通的,原因何在?听我分解。
        网络不通的话,一般第一步是通过抓包来分析,发现是在arp这一步出问题的,arp是IPv4的生命源,arp出了问题,什么都别扯了!懂Linux网络实现的家伙们其实早就知道为何出错了,因为作为从属接口brport,它的一切都要被网桥接口接管,包括arp,也就是说arp期望的接口信息都是关于网桥接口的而不是基于brport的。总的来说是这样的。
        IP地址配置在物理接口brport上,因此链路层路由显示的出口设备就是该brport,发送数据的时候,arp逻辑会将目标IP-Mac映射记录在该brport门下,然而arp回来的时候,网桥接口接收了它,内核发现网桥接口门下没有任何待解决的arp请求,因此丢弃之,因此根本不可能从本机访问和配置在brport上IP在同网段的任何目标。反过来也一样,arp请求从其它机器过来,被网桥接口接收,可是在arp_process中准备回复reply的时候,反向路由查找由于dev参数而无法通过,dev参数是网桥,而查询结果却是brport,因此failed。能分析到这个地步需要你十分精通网络协议的行为或者Linux内核协议栈。
        那么怎么解决这个问题呢?easy啊easy,以下一条命令即可:
ebtables -t broute -A BROUTING -p ARP --arp-ip-dst 12.12.12.12 -j redirect  --redirect-target DROP

这句话的意思就是,用物理接口,即brport接管arp,而不是用网桥接口。为了不影响网桥的正常流程,特意指定目标IP地址是这个添加到brport的地址。



 本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1268894

相关文章
|
1天前
|
关系型数据库 MySQL Linux
Linux下mysql数据库的导入与导出以及查看端口
本文详细介绍了在Linux下如何导入和导出MySQL数据库,以及查看MySQL运行端口的方法。通过这些操作,用户可以轻松进行数据库的备份与恢复,以及确认MySQL服务的运行状态和端口。掌握这些技能,对于日常数据库管理和维护非常重要。
23 8
|
4月前
|
网络协议 Linux
Linux查看端口监听情况,以及Linux查看某个端口对应的进程号和程序
Linux查看端口监听情况,以及Linux查看某个端口对应的进程号和程序
729 2
|
1月前
|
安全 Linux 网络安全
Linux 开放的端口太多了?教你一招找出所有开放的端口,然后直接干掉!
在 Linux 系统中,端口管理至关重要。本文介绍了如何使用 `netstat`、`lsof` 和 `nmap` 等工具查找开放端口,并通过关闭相关服务、修改防火墙规则或禁用网络接口来关闭这些端口,以提高系统安全性。注意不要随意关闭重要端口,谨慎操作并备份数据。
41 3
|
2月前
|
运维 Linux
Linux查找占用的端口,并杀死进程的简单方法
通过上述步骤和命令,您能够迅速识别并根据实际情况管理Linux系统中占用特定端口的进程。为了获得更全面的服务器管理技巧和解决方案,提供了丰富的资源和专业服务,是您提升运维技能的理想选择。
91 1
|
2月前
|
网络协议 安全 Linux
阿里云国际上如何检查 Linux 上正在使用哪些端口
阿里云国际上如何检查 Linux 上正在使用哪些端口
|
3月前
|
Linux Python
用python扫描linux开放的端口(3种方式)
这篇文章介绍了三种使用Python实现Linux端口扫描的方法,包括基础版端口扫描、全端口扫描和多线程扫描技术。
78 15
|
4月前
|
监控 网络协议 Linux
在Linux中,如何实时抓取并显示当前系统中tcp 80 端口的网络数据信息?
在Linux中,如何实时抓取并显示当前系统中tcp 80 端口的网络数据信息?
|
4月前
|
网络协议 安全 应用服务中间件
在Linux中,Tomcat8005、8009、8080三个端口的含义?
在Linux中,Tomcat8005、8009、8080三个端口的含义?
|
4月前
|
网络协议 Linux 网络安全
在Linux中,如何将本地 80 端口的请求转发到 8080 端口?当前主机 IP 为10.0.0.104。
在Linux中,如何将本地 80 端口的请求转发到 8080 端口?当前主机 IP 为10.0.0.104。
|
4月前
|
网络协议 Linux Shell
在Linux中,如何通过一个端口找到程序?
在Linux中,如何通过一个端口找到程序?