Linux系统多网卡环境下的路由配置
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
Linux系统多网卡环境下的路由配置的更多相关文章
- linux(ubuntu)环境下安装及配置JDK
安装完IDEA之后遇到了问题,发现jdk安装完之后配置环境变量好困难,下面总结一下我的安装及配置方式: JDK下载链接:http://download.oracle.com/otn-pub/java/ ...
- CentOS(六)--Linux系统的网络环境配置
Linux系统下的网络环境配置,Linux.Unix就是网络的世界,所以在Linux系统中如何配置网络环境变量是至关重要的,这里将会给出3种Linux系统下网络环境配置的方法! 在配置网络环境之前,首 ...
- 【课程分享】深入浅出嵌入式linux系统移植开发 (环境搭建、uboot的移植、嵌入式内核的配置与编译)
深入浅出嵌入式linux系统移植开发 (环境搭建.uboot的移植.嵌入式内核的配置与编译) 亲爱的网友,我这里有套课程想和大家分享,假设对这个课程有兴趣的,能够加我的QQ2059055336和我联系 ...
- Linux系统centOS7在虚拟机下的安装及XShell软件的配置
前面的话 本文将详细介绍Linux系统centOS7在虚拟机下的安装 准备工作 [系统下载] 在安装centOS7之前,首先在官网下载合适的版本 然后,选择一个链接下载即可 [虚拟机配置] 接下来,需 ...
- Linux系统CentOS6.2版本下安装JDK7详细过程
Linux系统CentOS6.2版本下安装JDK7详细过程 分类: Linux 2014-08-25 09:17 1933人阅读 评论(0) 收藏 举报 前言: java 是一种可以撰写 ...
- 新装Linux系统没有网卡驱动的解决办法和步骤
Linux下查看网卡驱动和版本信息 - CSDN博客 https://blog.csdn.net/guyan1101/article/details/72770424/ 检查网卡是否加载 - Linu ...
- linux系统(centos)下su和sudo命令的区别
linux系统(centos)下su和sudo命令的区别 区别 我们在日常使用过程中,这2个命令很多时候能达到相同的效果,对细节区别十分模糊,这里进行简单的解释和区分.希望大家能够正确使用这2个命令, ...
- AIX 环境下动态路由
IBM AIX v5.3操作系统环境下动态路由配置如下: 1,用命令lssrc -S routed和lssrc -S gated分别检查routed和gated子系统是是活动状态.如果这两个子系统为活 ...
- iOS系统提供开发环境下命令行编译工具:xcodebuild
iOS系统提供开发环境下命令行编译工具:xcodebuild[3] xcodebuild 在介绍xcodebuild之前,需要先弄清楚一些在XCode环境下的一些概念[4]: Workspace:简单 ...
随机推荐
- mumu模拟器安装xposed--如何在android模拟器上进行root
问题描述 安装xposed表示failed to access root权限,新版的mumu模拟器没有了root选项,需要自己root. 1.先关掉应用兼容性,然后重启 电脑一般都是x86的,mumu ...
- mysql 获取一张表中, 另一张表不存在的数据
编写sql语句中,经常需要编写获取一张数据表中不存在与另一张表的数据,相关编写方法如下: 方法1: 使用not in ,效率低下,在数据较小的情况下可以采用如下编写 SELECT * FROM a A ...
- 排序算法----冒泡排序java(写得绝对比其他博文易懂明了实用)
本来不想写的,看到别人写的都不符合自己心意 需进行n(n-1)/2次比较和记录移动,时间复杂度为O(n*n) import java.util.Arrays; import java.util.Sca ...
- python----csv的使用
详细的内容参考:https://docs.python.org/2/library/csv.html#module-csv 打开csv # -*- coding: utf8 -*- import cs ...
- mssql sqlserver 可以存储二进制数据的字段类型详解
转自: http://www.maomao365.com/?p=6738 摘要: 下文将从数据库的数据类型着手,剖析在sqlserver数据库中可以存储二进制数据的数据类型,如下所示: mssql s ...
- 洗礼灵魂,修炼python(72)--爬虫篇—爬虫框架:Scrapy
题外话: 前面学了那么多,相信你已经对python很了解了,对爬虫也很有见解了,然后本来的计划是这样的:(请忽略编号和日期,这个是不定数,我在更博会随时改的) 上面截图的是我的草稿 然后当我开始写博文 ...
- python第一百零八天---Django 3 session 操作
上节内容回顾: 1.请求周期 url> 路由 > 函数或类 > 返回字符串或者模板语言? Form表单提交: 提交 -> url > 函数或类中的方法 - .... Ht ...
- IIS下MySQL停止和启动的方法
mysql服务的启动与停止:点击开始--运行,输入services.msc , 在弹出的服务窗口中,找到mysql服务,直接点击左侧对应 的就可以了 如下图所示:
- 数据结构【查找】—B树
/*********************讲解后期补充*****************/ 先上代码 #include "000库函数.h" #define MAXSIZE 10 ...
- Java操作Excel(使用JXL)
一.本地操作 1.读取 package com.ljf.mb; import java.io.FileInputStream; import java.io.InputStream; import j ...