Linux 下路由配置命令
1. 添加主机路由
- route add -host 192.168.1.11 dev eth0
- route add -host 192.168.1.12 gw 192.168.1.1
2. 添加网络路由
- route add -net 192.168.1.11 netmask 255.255.255.0 eth0
- route add -net 192.168.1.11 netmask 255.255.255.0 gw 192.168.1.1
- route add -net 192.168.1.0/24 eth0
- route add -net 192.168.1.0/24 gw 192.168.1.1
3. 添加默认网关
route add default gw 192.168.1.1
4. 删除路由
route del -host 192.168.1.11 dev eth0
5. 删除默认路由
route del default gw 192.168.1.1
Linux 下配置永久路由的几种方式
1. 在 / etc/rc.local 里添加路由信息
- route add -net 192.168.1.0/24 dev eth0
- # 或者
- route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1
2. 在
/etc/sysconfig/network
里追加
GATEWAY=[网关 IP 或者网关网卡名称]
- 3.
- /etc/sysconfig/static-routes
- any.NET 192.168.1.0/24 gw 192.168.1.1
- # 或者
- any.NET 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1
4. 开启 IP 转发
1. 临时开启
echo "1"> /proc/sys.NET/ipv4/ip_forward
2. 永久开启
VIM /etc/sysctl.conf
修改 net.ipv4.ip_forward=1
实验: 配置双网卡主机同时使用内网和外网
本实验的背景是笔者在实践中遇到过的一个问题, 本实验尽量还原当时的网络环境. 仅当做一份笔记, 同时分享给遇到此问题的同学.
奈何我现在没有硬件呀 (T_T)... 只能拿 VMware Workstation 和 eNSP 来模拟实验环境了.
问题背景
如下图拓扑所示, 如果去掉 client 节点, 内网和外网就是相互隔离的网络.
但是实际情况是, client 节点既需要访问外网资源, 又需要访问内网资源, 而 client 只能配置一条默认路由. 如果将默认路由配置在外网网卡, client 可以访问 172.16.2.0/24 网络的资源和外网的资源, 但是其余内网资源将无法访问; 如果将默认路由配置在内网网卡, client 虽然可以完全访问内网资源, 但是却不能访问外网资源.
怎么解决呢?
实验环境
VMware Workstation Pro
4 台最小化安装的 CentOS 7.3 虚拟机
华为 eNSP 模拟器
实验拓扑
去掉 client 节点, 内网和外网是隔离的网络.
外网网络为 10.0.0.0/16, 代表运营商的接入网;
内网网络为 172.16.0.0/16, 代表内网部分 (该部分为了安全, 不允许对互联网的直接访问).
其中:
client 为双网卡的主机, 两网卡网段分别为 10.0.0.0/16,172.16.2.0/24;
server2 为 172.16.2.0/24 网段的服务器;
server3 为 172.16.3.0/24 网段的服务器;
server4 为 172.16.4.0/24 网段的服务器.
网络规划
IP 分配
节点名称 | IP 地址 | 子网掩码 | 备注 |
---|---|---|---|
client | 10.0.0.101 | 255.255.0.0 | client 的外网网卡 |
172.16.2.101 | 255.255.255.0 | client 的内网网卡 | |
Server2 | 172.16.2.11 | 255.255.255.0 | 172.16.2.0/24 网段的某台服务器 |
Server3 | 172.16.3.11 | 255.255.255.0 | 172.16.3.0/24 网段的某台服务器 |
Server4 | 172.16.4.11 | 255.255.255.0 | 172.16.4.0/24 网段的某台服务器 |
内网路由器 | 172.16.2.254 | 255.255.255.0 | 172.16.2.0/24 的网关 |
172.16.3.254 | 255.255.255.0 | 172.16.3.0/24 的网关 | |
172.16.4.254 | 255.255.255.0 | 172.16.4.0/24 的网关 |
虚机网卡类型
网络名称 | VMware 网卡类型 | 网络范围 |
---|---|---|
运营商网络 | 桥接 | 10.0.0.0/16 |
VMnet2 | 仅主机 | 172.16.2.0/24 |
VMnet3 | 仅主机 | 172.16.3.0/24 |
VMnet4 | 仅主机 | 172.16.4.0/24 |
内网路由器如何实现呢?
VMnet2,VMnet3,VMnet4 均为仅主机模式, 那么常规情况下, 只有其网络内的各计算机之间才可以通信, 要怎样才能实现三个网络间的通信呢?
答案是使用华为 eNSP 模拟器中的 Cloud. 使用 Cloud 设备可以将 eNSP 中的路由器和 VMware 虚拟机的网卡连接起来.
配置内网环境
配置 eNSP 的路由器
接口 | IP 地址 | 子网掩码 |
---|---|---|
G0/0/0 | 172.16.2.254 | 255.255.255.0 |
G0/0/1 | 172.16.3.254 | 255.255.255.0 |
G0/0/2 | 172.16.4.254 | 255.255.255.0 |
- <huawei>
- system-view [huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip address
- 172.16.2.254 255.255.255.0 [Huawei-GigabitEthernet0/0/0]quit [huawei]int
- g0/0/1 [Huawei-GigabitEthernet0/0/1]ip address 172.16.3.254 255.255.255.0
- [Huawei-GigabitEthernet0/0/1]quit [huawei]int g0/0/2 [Huawei-GigabitEthernet0/0/2]ip
- address 172.16.4.254 255.255.255.0 [Huawei-GigabitEthernet0/0/2]quit [huawei]
修改虚机的 IP 地址
client
网卡名称 | IP 地址 | 子网掩码 | 默认网关 | 备注 |
---|---|---|---|---|
ens33 | 10.0.0.101 | 255.255.0.0 | 10.0.0.1 | 外网网卡 |
ens37 | 172.16.2.101 | 255.255.255.0 | 内网网卡 |
server2
网卡名称 | IP 地址 | 子网掩码 | 默认网关 | 备注 |
---|---|---|---|---|
ens33 | 172.16.2.11 | 255.255.255.0 | 172.16.2.254 |
server3
网卡名称 | IP 地址 | 子网掩码 | 默认网关 | 备注 |
---|---|---|---|---|
ens33 | 172.16.3.11 | 255.255.255.0 | 172.16.3.254 |
server4
网卡名称 | IP 地址 | 子网掩码 | 默认网关 | 备注 |
---|---|---|---|---|
ens33 | 172.16.4.11 | 255.255.255.0 | 172.16.4.254 |
在 server 上搭建 HTTP 服务
以 server2 为例:
使用 Python 创建一个简单的 HTTP 服务
- cd ~
- echo "server2"> index.html
- python -m SimpleHTTPServer 8080
对照试验
在 client 上访问外网
ping www.baidu.com -c 4
在 client 上访问 server2
ping 172.16.2.11 -c 4
在 client 上访问 server3
ping 172.16.3.11 -c 4
在 client 上访问 server4
ping 172.16.4.11 -c 4
在对照试验中可以看到, 在 client 将默认网关配置在外网网卡的情况下, 双网卡的 client 可以正常访问外网和内网的 172.16.2.0/24 部分, 而 172.16.3.0/24 和 172.16.4.0/24 是不能访问到的.
为什么 client 能访问 172.16.2.0/24 网络, 而不能访问 172.16.0.0/16 的其余网络呢?
因为 client 位于 172.16.2.0/24 网络内, 在网络内进行通信, 数据包不用发送至其他网络, 当然默认网关也就不起作用了.
而当 client 与 172.16.0.0/16 的其余网络通信时, client 的路由表没有记载发往目的地址的路径, 所以 client 只能傻傻的把数据包发送给默认网关, 从此数据包和真正的目的地址就 "南辕北辙" 了. 当然 ping 的结果就是网络不可达.
路由配置
在 client 上查看路由表
route
在 client 上添加路由
route add -net 172.16.0.0/16 gw 172.16.2.254
永久配置, 则在 / etc/rc.local 里添加路由信息
route add -net 172.16.0.0/16 gw 172.16.2.254
查看路由表
route
实验结果
检测连通性
ping www.baidu.com -c 4
ping 172.16.2.11 -c 4
ping 172.16.3.11 -c 4
ping 172.16.4.11 -c 4
访问内外网资源
curl http://www.baidu.com/
- curl http://172.16.2.11:8080/index.html
- curl http://172.16.3.11:8080/index.html
- curl http://172.16.4.11:8080/index.html
解决的办法很简单, 就是 1 条命令而已.
但是蕴藏在这条命令背后的原理, 概念, 理论, 则需要我们进行深究!
本文链接: https://www.cnblogs.com/connect/p/linux-static-route.html
来源: https://www.cnblogs.com/connect/p/linux-static-route.html