# ip为自动获取时的路由表 [root@localhost ~]# ip route show default via 192.168.11.1 dev ens33 proto dhcp src 192.168.11.68 metric 100 default via 192.168.12.1 dev ens36 proto dhcp src 192.168.12.28 metric 101 192.168.11.0/24 dev ens33 proto kernel scope link src 192.168.11.68 metric 100 192.168.12.0/24 dev ens36 proto kernel scope link src 192.168.12.28 metric 101 # ip为固定时的路由表 [root@localhost ~]# nmcli connection modify Wired\ connection\ 1 ipv4.method manual ipv4.addresses 192.168.11.68/24 ipv4.gateway 192.168.11.1 ipv4.dns 114.114.114.114 connection.autoconnect yes [root@localhost ~]# nmcli connection modify Wired\ connection\ 2 ipv4.method manual ipv4.addresses 192.168.12.28/24 ipv4.gateway 192.168.12.1 ipv4.dns 114.114.114.114 connection.autoconnect yes 把网卡down再up查看 [root@localhost ~]# ip route show default via 192.168.11.1 dev ens33 proto static metric 100 default via 192.168.12.1 dev ens36 proto static metric 101 192.168.11.0/24 dev ens33 proto kernel scope link src 192.168.11.68 metric 100 192.168.12.0/24 dev ens36 proto kernel scope link src 192.168.12.28 metric 101
可以看到不管自动还是手动指定ip默认路由是从192.168.11.1网关走。
本机电脑ip为 192.168.6.100,本机和目标机器通过三层交换机连接。
本机ping 192.168.11.68是通的,但是ping 192.168.12.28不通。
原因就是因为almalinux(ID_LIKE=”rhel centos fedora”)默认开启反向路径检查 – Reverse Path Filtering(rp_filter)
# 查看内核参数 [root@localhost ~]# sysctl -a |grep -w rp_filter net.ipv4.conf.all.rp_filter = 0 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.ens33.rp_filter = 1 net.ipv4.conf.ens36.rp_filter = 1 net.ipv4.conf.lo.rp_filter = 1
rp_filter是Linux Kernel以及众多网络设备采用的一种保护机制,以用来检查收到的数据包的原地址是否可路由。
开启rp_filter功能时,当服务器收到一个数据包之后,将此数据包的源地址和目的地址对调后也就是构建的响应数据包,
通过查找路由表之后发现响应包依然从收到数据包的网卡发送回去,则表示此消息通过了rp_filter的检测。
此内核参数有3个值:
0 关闭反向路由校验
1 严格模式,对每一个进来的数据包,如果反向路由不是通过收到数据的包接口,校验失败后收到的数据包丢弃
2 宽松模式,对每个进来的数据包,校验源地址是否可达,如果反向路由可以通过任何接口到达,那么校验成功,否则校验失败后数据包丢失
# 测试开关脚本 [root@localhost ~]# cat rp.sh if [ "$1" == "stop" ]; then sysctl -w net.ipv4.conf.all.rp_filter=0 sysctl -w net.ipv4.conf.default.rp_filter=0 sysctl -w net.ipv4.conf.ens33.rp_filter=0 sysctl -w net.ipv4.conf.ens36.rp_filter=0 sysctl -w net.ipv4.conf.lo.rp_filter=0 else sysctl -w net.ipv4.conf.all.rp_filter=1 sysctl -w net.ipv4.conf.default.rp_filter=1 sysctl -w net.ipv4.conf.ens33.rp_filter=1 sysctl -w net.ipv4.conf.ens36.rp_filter=1 sysctl -w net.ipv4.conf.lo.rp_filter=1 fi [root@localhost ~]# bash rp.sh stop
当关闭检查时(设置为0),2个ip都可以ping通了,也可以通过这2个ip连接ssh服务。
在不同的linux发行版中,此值可能不同。在ubuntu系统中,此值默认为2,即宽松模式。
https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt
目前RFC3704推荐启用严格模式以防止DDos攻击对IP欺骗的攻击。
如果使用非对称路由或其他复杂的路由,则推荐使用宽松模式。
非对称路由
非对称路由是指发送和接收数据包时,分别使用了主机和目的地设备之间两条不同的路径。
参考:https://blog.csdn.net/chiyuwei1766/article/details/50706306