描述
在很多业务场景下,会遇上很多诡异的需求,不仅限于文章提及的需求,还有各种五花八门的需求,大部份的这些需求的产生都是来源于以前设计、规划上导致的问题。所以我们都会想尽办法为客户解决问题。
环境信息
OS: Centos7及以上
VM 主机A IP | 网卡 | 网卡用途 | 默认路由 |
10.0.43.15 | eth0 | 管理网 | yes |
VM 主机B IP | 网卡 | 网卡用途 | 默认路由 |
10.0.44.63 | eth0 | 业务网 | yes |
10.0.43.101 | eth1 | 管理网 | no |
需求
因特殊原因。用户需要在主机A访问到10.0.44.0/24的业务网段,主机A 又不能直接使用到业务网。 所以只能利用主机B,采用snat的方式进行转发主机A业务请求访问到业务网。
实现方法
# 在主机A添加静态路由,访问10.0.44.0/24流量都从eth0出去,并且下一跳地址是10.0.43.101
# 在主机B的eth1网卡进行抓包查看,发现icmp包已经过来了。
# 但在主机B的eth0的网卡并没有发现icmp包, 这是什么原因?怀疑是port_security
的问题和ip_forward
。
# 关闭主机B eth0和eth1 的port_security
, 在openstack 环境下的配置。
# 主机B配置ip_forward
出于安全考虑,Linux系统默认是禁止数据包转发的。所谓转发就是当主机拥有多块网卡时,其中一块收到数据包,根据数据包的目的ip地址将数据包发往本机另一块网卡,该网卡根据路由表继续发送数据包(通常这是需要路由器来实现的功能)。
# 在主机B eth0口抓包发现包已经过来了,但是发现只有request
包没有replay
响应的包。仔细分析发现源IP是10.0.43.15
去访问10.0.44.1肯定是不通,因为10.0.44.0/24网络上连交换机没有10.0.43.0/24的路由返回来。
# 在主机B iptables配置源10.0.44.0/24地址转换成10.0.44.63出去, 对于不是很熟iptables的同学了解此文章[浅聊iptables]
# 在主机A发现去访问10.0.44.1的icmp通了。