路由
路由
什么是交换,什么是路由,什么是路由表?
交换是指同网络访问(两台机器连在同一个交换机上,配置同网段的不同ip就可以直接通迅)
路由就是跨网络访问(路径选择)
路由表是记录路由信息的表(可以单路由表,也可以多路由表)
因特网 ---》 物联网(互联网+)
(无数个网络组成,所以从一个网络到另一个网络,中间可能还要经过很多个网络,必需要走路由)
我们现在讨论的是单路由表,用route -n查看
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet8
1.1.1.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet1
172.16.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
0.0.0.0 172.16.254.254 0.0.0.0 UG 0 0 0 eth0
问题1:按上面的路由表来看,如果我ping一个公网IP(如ping 14.215.177.38),应该怎么走?
我在本机访问一个IP,先看目标ip是否为本地ip,如果是,则直接访问本地;如果不是,则找路由表里是否有你访问的网段,有的话则从这个路由条目后面指定的网卡出去;如果路由表里没有你访问的网段,则会找默认路由(也就是网关);如果网关也没有的话,则会报错网络不可达。
问题2:按上面的路由表来看,如果我ping一个公网IP(如ping 1.1.1.1),会怎么走?
按上面问题的答案来讲,我ping 1.1.1.1应该不会走网关,而是走本地路由从vmnet1网卡出去(因为路由表里有1.1.1.0/24的路由)。但是1.1.1.1实际应该是一个真正的公网IP.这样其实会影响你访问公网的1.1.1.0/24.所以一般来说,不要在内网网卡上配置公网IP,我这里配置1.1.1.1只是为了方便而已(另一个目的就是为了说明这个问题)
问题3:如何加网关和删除网关,加网关有什么要求?
# route add default gw x.x.x.x --临时加网关,马上生效
# route del default gw x.x.x.x --临时删网关,马上生效
永久加网关的方法
在网卡配置文件里/etc/sysconfig/network-scripts/ifcfg-eth0
加一句GATEWAY=x.x.x.x
eth0:0
加网关只能加你已经有的路由网段里的一个IP才行(ping不通此IP都可以)
加网关不需要指定子网掩码(因为是已有的一个网段的ip,所以掩码已经确认了)
问题4:一个linux上能有几个有效网关?
准确来说:一个路由表上可以加多个网关,但只有一个生效。但一台linux是可以做多路由表的,一个路由表一个有效网关,多路由表就是多个网关了。
问题5:我一台linux上如果有双物理网卡,请问可不可以两个网卡配置同网段的不同IP呢?
假设我的eth0 10.1.1.5/24
eth1 10.1.1.6/24
如果两个网卡同网段,则会有下面两条路由
10.1.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
10.1.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
它会实现从两张网卡进来的包,却从一张网卡出去,问题就产生了。
也有解决方法(比如多路由表)
实验:
步骤一:
一个虚拟机,开两个网卡,都为桥接网络,配置两个IP,如下
# ifconfig |grep eth -A 1
eth0 Link encap:Ethernet HWaddr 00:0C:29:75:71:E6
inet addr:10.1.1.5 Bcast:10.1.1.255 Mask:255.255.255.0
--
eth1 Link encap:Ethernet HWaddr 00:0C:29:95:B0:42
inet addr:10.1.1.6 Bcast:10.1.1.255 Mask:255.255.255.0
步骤二:
在另一台机器(我这里为宿主机,ip为10.1.1.9),分别ping上面两个ip,得到结果为两个人的MAC都为第一个网卡的
# ip neigh |grep ^10.1.1
10.1.1.5 dev eth0 lladdr 00:0c:29:75:71:e6 REACHABLE
10.1.1.6 dev eth0 lladdr 00:0c:29:75:71:e6 REACHABLE
步骤三:
在虚拟机上ifconfig eth1 down关闭10.1.1.6的网卡,宿主机仍然可以ping通10.1.1.6
结论:在linux上,宿主机ping 10.1.1.6,虚拟机10.1.1.5这个网卡也能收到arp请求,并且会帮10.1.1.6回应(这是由linux默认的内核参数所决定的)
步骤四:
# vim /etc/sysctl.conf -----加上
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2
net.ipv4.conf.eth1.arp_ignore = 1
net.ipv4.conf.eth1.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
# sysctl -p -----用此命令让其生效
最终的效果的是宿主机只能ping通10.1.1.5了,ping不通10.1.1.6了