Linux系统的route命令用于显示和操作IP路由表,要实现两个不同的网段之间的通信,需要一台连接两个网络的路由器,或者同时连接位于两个网络的网关来实现。

在Linux系统中,设置路由通常是为了解决以下问题:该Linux系统在一个局域网中,局域网中有一个网关,能够让机器访问Internet,那么就需要将这台机器的IP地址设置为Linux机器的默认路由。要注意的是,直接在命令行下执行route命令来添加路由,不会永久保存,当网卡重启或者机器重启之后,该路由就失效了;可以在/etc/rc.local中添加route命令来保证该路由设置永久有效。

普通路由表查看

route -n

第一个Destination是目标地址:

Gateway:网关地址,本机所在网段网关一律通过0.3出去

Iface:是通过那块网卡出去:我这里只有一块网卡eth0

具体可以使用下列命令实现:

ip ro add 192.168.3.0/24 via 192.168.0.3
ip ro add 192.168.4.0/22 via 192.168.0.3
ip ro add 192.168.8.0/22 via 192.168.0.3
ip ro add 192.168.50.0/24 via 192.168.0.3
ip ro add 192.168.64.0/22 via 192.168.0.3

高级路由查看

ip rule show

ip rule show显示的内容,大体上可以分为三段:

第一段:冒号之前的数字,表示该路由表被匹配的优先顺序,数字越小,越早被匹配。这个优先级别范围是0~4亿多。默认0、32766、32767三个优先级别已被占用。如果在添加规则时没有定义优先级别,那么默认的优先级别会从32766开始递减,可以通过prio ID参数在设置路由表时添加优先级。

第二段:from关键字,这里显示的是匹配规则,当前表示的是从哪里来的数据包,除了from关键字外,还有to到、tos、fwmark、dev设备等等。

第三段:loacl/main/default 这些都是路由表名称,表示数据包要从那个路由表送出去。local表包含本机路由及广播信息,main表就是我们route -n看到的内容,default表,默认为空。

在添加规则时,需要先定义好优先级、条件及路由表ID,然后才可以添加规则。如下例:

#根据源地址决定路由表

  ip rule add from 192.168.10.0/24  table 100

  ip rule add from 192.168.20.20    table 110

#根据目的地址决定路由表

  ip rule add to   192.168.30.0/24  table 120

  ip rule add to   192.168.40.0/24  table 130

#根据网卡设备决定路由表

  ip rule add dev  eth0  table 140

  ip rule add dev  eth1  table 150

#此外还可以根据其他条件进行设置,例如tos等等

  上面的路由表都是用100、110、120、130等数字表示的,时间一久难免自己也会忘记该路由表的作用,不过iproute提供了一个路由表和名称的对应表(/etc/iproute2/rt_tables),可以手动修改该表。

高级路由技术:linux双线策略路由

双线服务器有2个外网网卡,一个配电信IP, 一个配网通IP.
策略路由让电信网的数据走电信网卡,电信网关; 网通的数据走网通的网卡,网通网关。一个脚本简单实现

#!/bin/sh

grep cnc /etc/iproute2/rt_tables > /dev/null
if [ $? = 1 ];then
echo 200 cnc >> /etc/iproute2/rt_tables
fi
grep ctc /etc/iproute2/rt_tables > /dev/null
if [ $? = 1 ];then
echo 201 ctc >> /etc/iproute2/rt_tables
fi

CNC_DEVICE="eth1"
CNC_RULE="cnc"
CNC_NETWORK=`ip ro li | grep ${CNC_DEVICE} |awk '{print $1}'| sed 'q'`
CNC_GATEWAY=`grep "GATEWAY" /etc/sysconfig/network-scripts/ifcfg-${CNC_DEVICE} |awk -F "=" '{print $2}'`
CNC_IPADDR=`grep "IPADDR" /etc/sysconfig/network-scripts/ifcfg-${CNC_DEVICE} |awk -F "=" '{print $2}'`

CTC_DEVICE="eth0"
CTC_RULE="ctc"
CTC_NETWORK=`ip ro li | grep ${CTC_DEVICE} |awk '{print $1}'| sed 'q'`
CTC_GATEWAY=`grep "GATEWAY" /etc/sysconfig/network-scripts/ifcfg-${CTC_DEVICE} |awk -F "=" '{print $2}'`
CTC_IPADDR=`grep "IPADDR" /etc/sysconfig/network-scripts/ifcfg-${CTC_DEVICE} |awk -F "=" '{print $2}'`

if (($# != 0)); then
if [ "$1" != "add" -a "$1" != "del" ]; then
echo "error"
else
ACTION="$1"
fi
fi

ip route add ${CNC_NETWORK} dev ${CNC_DEVICE} src ${CNC_IPADDR} table ${CNC_RULE}
ip route add default via ${CNC_GATEWAY} table ${CNC_RULE}

ip route add ${CTC_NETWORK} dev ${CTC_DEVICE} src ${CTC_IPADDR} table ${CTC_RULE}
ip route add default via ${CTC_GATEWAY} table ${CTC_RULE}

ip rule add from ${CNC_IPADDR} table ${CNC_RULE}
ip rule add from ${CTC_IPADDR} table ${CTC_RULE}

  linux   下ipsec 配置gre隧道技术

环境:两台linux服务器,分别在两地。并且两台机器都有实ip与互联网向链接,能够互相通讯。组成一个互通的局域网

-------------------------------------INTERNET------------------------------------ 
| 192.168.100.0/24 | 203.74.199.50 <------> 101.231.125.226 |192.168.0.0/16| 
|-     -     -     -                |         |               -    -     -     -| 
|      eth1        |       eth0     |         |    eth0       |      eth1       | 
---------------------------------------------------------------------------------

在 203.74.199.50 上创建: 

modprobe ipip 
ip tunnel add tun1 mode ipip remote 101.231.125.226 local 203.74.199.50 ttl 64 
ip link set tun1 mtu 1480 up 
ip address add 192.168.200.253 brd 255.255.255.255 peer 203.74.199.50 dev tun1 
ip route add 192.168.200.0/24 via 192.168.200.253 

在101.231.125.226上创建: 

modprobe ipip 
ip tunnel add tun1 mode ipip remote 203.74.199.50  local 101.231.125.226  ttl 64 
ip link set tun1 mtu 1480 up 
ip address add 192.168.100.253 brd 255.255.255.255 peer  203.74.199.50 dev tun1 
ip route add 192.168.0.0/16 via 192.168.100.253

#!/bin/bash

##
## 基于 Linux 的 IP 隧道控制脚本
## Jack.Li
## V0.2
## 2008-10-11 20:06
##

# VPN 远端设备IP
REMOTE_ADDR='122.228.192.2'

# VPN 本地出口设备IP
LOCAL_ADDR='203.74.199.50'

# VPN 本地出口设备
LOCAL_DEV='eth0'

# VPN 虚拟设备名
TUN_NAME='tun100'

# VPN 模式,可为 ipip gre
MODE='gre' # ipip gre

# VPN 本地IP
TUN_IPADDR='192.168.254.50'

# VPN 网关 IP
TUN_GATEWAY='192.168.254.50'

# 附加路由,以数组的形式保存
ROUTE_ADD=('192.168.0.0/16' "10.10.0.0/16" "192.168.254.2")

#####
ACTION="up"

if (($# != 0)); then
if [ "$1" != "up" -a "$1" != "down" ]; then
echo "error"
exit 1
else
ACTION="$1"
fi
fi

if ((`lsmod | grep -c "ip_gre"` == 0));then
modprobe ip_gre
fi

if [ "${ACTION}" = "up" ]; then
if ((`ifconfig | grep -c ${TUN_NAME}` > 0)); then
exit 1
fi
ip tunnel add ${TUN_NAME} mode ${MODE} remote ${REMOTE_ADDR} local ${LOCAL_ADDR} dev ${LOCAL_DEV} ttl 64

ip link set ${TUN_NAME} up
ip addr add ${TUN_IPADDR} dev ${TUN_NAME}

#ip route add ${TUN_GATEWAY} dev ${TUN_NAME}
for((i=0;i<=${#ROUTE_ADD[@]}-1;i++));do
ip route add ${ROUTE_ADD[${i}]} dev ${TUN_NAME} via ${TUN_GATEWAY}
done
fi

if [ "${ACTION}" = "down" ]; then
if ((`ifconfig | grep -c ${TUN_NAME}` > 0)); then
echo "down ${TUN_NAME}"
ip link set ${TUN_NAME} down
ip tunnel del ${TUN_NAME}
fi
fi

总结linux路由技术的更多相关文章

  1. 深入理解linux网络技术内幕读书笔记(三)--用户空间与内核的接口

    Table of Contents 1 概论 1.1 procfs (/proc 文件系统) 1.1.1 编程接口 1.2 sysctl (/proc/sys目录) 1.2.1 编程接口 1.3 sy ...

  2. Cisco路由技术基础知识详解

    第一部分 请写出568A的线序(接触网络第一天就应该会的,只要你掐过,想都能想出来) .网卡MAC地址长度是(  )个二进制位(16进制与2进制的换算关系,只是换种方式问,不用你拿笔去算) A.12  ...

  3. 学习笔记:CentOS7学习之十九:Linux网络管理技术

    目录 学习笔记:CentOS7学习之十九:Linux网络管理技术 本文用于记录学习体会.心得,兼做笔记使用,方便以后复习总结.内容基本完全参考学神教育教材,图片大多取材自学神教育资料,在此非常感谢MK ...

  4. 掌握 Linux 调试技术

    掌握 Linux 调试技术 在 Linux 上找出并解决程序错误的主要方法 Steve Best (sbest@us.ibm.com)JFS 核心小组成员,IBM 简介: 您可以用各种方法来监控运行着 ...

  5. linux 编程技术

    linux 编程技术No.1前期准备工作 GCC的编译过程分为预处理.生成汇编代码.生成目标代码和链接成可执行文件等4个步骤. 使用vim编写C 文件 : [lining@localhost prog ...

  6. 关于Linux虚拟化技术KVM的科普

    虚拟化技术应用越来越广泛,虚拟化技术需求越来越强劲.KVM.XEN.Docker等比较热门,尤其是KVM技术越来越受欢迎. 基于此背景,了解一下KVM+QEMU就有点必要了. 从网上收集了一些资料进行 ...

  7. linux路由

    https://www.cnblogs.com/luckyall/p/6418965.html https://www.cnblogs.com/dapaitou2006/p/6564622.html一 ...

  8. Windows完成端口与Linux epoll技术简介

    收藏自:http://www.cnblogs.com/cr0-3/archive/2011/09/09/2172280.html WINDOWS完成端口编程1.基本概念2.WINDOWS完成端口的特点 ...

  9. 一个非典型的Linux路由配置方案

    上周帮人解决了一个问题,这个问题绝对是非典型性的,采用了非常规的方法.虽然最终的方案非常不符合常规,非常不通用,充满了各种藏得很深的技巧或者说是trick,但是这个问题却是一个学习Linux路由的绝好 ...

随机推荐

  1. 基于嵌入式操作系统VxWorks的多任务并发程序设计(1)――基本概念

    1引言 嵌入式系统定义义为:嵌入到对象体系中的专用计算机系统."嵌入性"."专用性"与"计算机系统"是嵌入式统的三个基本要素,对象系统则是指 ...

  2. 错误号:1364 错误信息:Field 'platId' doesn't have a default value

    1. 错误描述 错误号:1364 错误信息:Field 'platId' doesn't have a default value insert into `use`.`t_platform_scal ...

  3. Caused by: java.lang.ClassNotFoundException: javax.persistence.NamedStoredProcedureQuery

    1.错误描述 2014-7-12 21:06:37 org.hibernate.engine.jdbc.internal.LobCreatorBuilder useContextualLobCreat ...

  4. xml字符串转为XmlDocument

    string xml = "<xml><logistics_express_get_respose><express_detail><company ...

  5. HTML5中的输入框

    HTML5中的输入框 1.双引号 <input type="text"/> 2.单引号 <input type='text'/> 3.无引号 <inp ...

  6. C# md5加密方法

    public static string md5(string str, int code) { if (code == 16) //16位MD5加密(取32位加密的9~25字符) { return ...

  7. directX--关于CSource和CSourceStream (谁调用了fillbuffer)

    CSourceStream类,是CSource类的OutputPin[source.h/source.cpp]派生自CAMThread和CBaseOutputPinl         成员变量: CS ...

  8. html标签自带样式总结

    一.html标签自带样式 head { display:none; } body { margin:8px; line-height:1.12; } button, textarea, input, ...

  9. 芝麻HTTP:Python爬虫入门之正则表达式

    1.了解正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来 ...

  10. 【BZOJ2882】工艺(后缀自动机)

    [BZOJ2882]工艺(后缀自动机) 题面 BZOJ权限题,良心洛谷 题解 还是一样的,先把串在后面接一遍 然后构建\(SAM\) 直接按照字典序输出\(n\)次就行了 #include<io ...