1. 此时如果本机用户空间的应用程序不需要产生新的数据, 那便不涉及从某个网卡流出数据
2. 如果本机用户空间的应用程序需要产生新的数据包对外发送,那便需要从某个网卡流出数据
3. 但在流出之前,也需要做路由决策:根据目标决定从哪个网卡流出
??方式1
# echo 1 > /proc/sys/net/ipv4/ip_ forward
??方式2
# sysctl -W net.ipv4.ip_forward=1
??CentOS 6中
将"/etc/sysctl.conf"文件中的 "net.ipv4.ip_forward" 值改为1即可
??在"Centos7"中"systemd"管理了很多功能,"sysctl"的配置文件也分化为多个
"/etc/sysctl.conf"
"/etc/sysctl.d/*.conf"
"/usr/lib/sysctl.d/*.conf"
并且这些文件中默认都没有"net.ipv4.ip_forward"项
??建议直接写入"systemd"提供自定义内核修改项的目录
# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/ip_forward.conf
??[root@shawn ~]#sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0
??[root@shawn ~]#cat /proc/sys/net/ipv4/ip_forward
0
??[root@shawn ~]#sysctl -a | grep ip_forward
net.ipv4.ip_forward = 0
??只有当本机被别人当成网关并且本机开启路由转发功能时
??别人发来的请求包,本机才会帮忙转发,这一点很重要,请务必记住
??IP地址是属于内核的(不仅如此,整个tcp/ip协议栈都属于内核,包括端口号)
??只要能和其中一个地址通信,就能和另一个地址通信,而不需要开启数据包转发功能
??主机路由是直接指明到某台具体的主机怎么走, 主机路由也就是所谓的静态路由
??网络路由指明到哪一类网络
??不走主机路由和网络路由的, 全部走默认路由
??操作系统上设置的默认路由一般也称为网关
1. 主机路由 #最高
2. 网络路由 #第二
3. 默认路由 #最低
??如果在本机"ping 4.4.4.4"
[root@shawn ~]#route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 1.1.1.2 0.0.0.0 UG 0 0 0 ens32
1.1.1.0 0.0.0.0 255.255.255.0 U 0 0 0 ens32
2.2.2.3 1.1.1.2 255.255.255.255 UGH 0 0 0 ens32
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 ens32
??先检索掩码长度,然后再对应"Destination"(目的地)
1. 255.255.255.255 ---->2.2.2.3 #发现无法匹配
2. 255.255.255.0 ------>1.1.1.0 #无法匹配
3. 255.255.0.0 -------->169.254.0.0 #无法匹配
4. 0.0.0.0 ------------>0.0.0.0 #能匹配
??如果检索到了两块网卡网段地址都是"4.4.4.0"(能匹配),子网掩码长度也相同"255.255.255.0"
??但是如果本机直连的是"eth0"网卡,那么"eth0"对应的那条路由条目优先级高
route
命令route [add / del] [-host / -net / default] [ip地址/及掩码] [gw] [dev]
add / del | 添加或删除路由条目 |
---|---|
-host | 主机路由 |
-net | 网络路由 |
default | 默认路由 |
gw | 指定下一跳 |
dev | 强制将路由条目关联到指定接口, 一般内核会自动判断 |
route -n
查看路由表Flags 列所代表的的含义
U | (route is up)开启 |
---|---|
H | (target is a host) 是一个主机路由 |
G | (user gateway) 设置了下一跳 |
??添加
# route add -host 172.16.10.55 gw 192.168.10.20
??删除
# route del -host 172.16.100.55
??添加
# route add -net 172.16.10.0/24 gw 192.168.100.70
# route add -net 172.16.10.0 netmask 255.255.255.0 gw 192.168.100.70
??如果没有下一跳,可以直接指定接口也是可以的
# route add -net 172.16.10.0/24 dev eth0
??删除
# route del -net 172.16.10.0/24 gw 192.168.100. 70
# route del -net 172.16.10.0 netmask 255.255.255.0 gw 192.168.100.70
# route del -net 172.16. 10.0/24 dev eth0
??但大多数使用简短删除方法(偷懒行为)
# route del -net 172.16. 10.0/24
??添加
# route add default gw 192. 168.100.10
??删除
# route del default
# route del default gw 192.168. 100.10
??若有多条默认路由, 后面加上"gw"地址就可以唯一删除指定条目
/etc/sysconfig/network-script/route-ethXX
:XX代表的是接口编号
DEST via nexthop
[目标地址] [关键字] [下一跳地址]
??主机路由
"192.168.100.52/32 via 192.168.100.33 dev eth1"
??默认路由
"default via 192.168.100.1"
"0.0.0.0/0 via 192.168.100.1"
??网络路由
"192.168.10.0/24 via 192.168.100.1"
使所有IP地址能相互 ping 通
原文:https://www.cnblogs.com/songhaixing/p/13987024.html