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. 【linux】linux下网络的配置

    linux网络的配置 一.配置网络vi  /etc/sysconfig/network 配置网络vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE= ...

  2. Column 'id' in where clause is ambiguous

    1.错误描述 org.hibernate.exception.ConstraintViolationException: error executing work at org.hibernate.e ...

  3. org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'transactionManager'

    1.错误描述 五月 01, 2015 2:12:31 下午 org.hibernate.validator.util.Version <clinit> 信息: Hibernate Vali ...

  4. Caused by: java.lang.ClassNotFoundException: net.sf.ezmorph.Morpher

    1.错误描述 Exception in thread "main" java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher a ...

  5. 版本控制工具--svn和git的使用(二) -----SVN的操作

    SVN的使用 开头: 对于svn的详解,我不是很熟,只是用过svn的客户端,没使用过服务端,在这里我只是简单说一下在svn的客户端怎么拉取代码,提交代码和修改冲突等等.svn的客户端我在Mac中用的s ...

  6. java用Kruskal实现最小生成树

    今天更新这篇文章超级激动,因为我会最小生成树的算法了(其实昨天就开始研究了,只是昨天参加牛客网的算法比赛,结果又被虐了,好难过~) 最小生成树的算法,其实学了数据结构就会有一定的基础,Kruskal算 ...

  7. 内置函数:filter函数

    功能: filter函数用于过滤序列,将满足条件的元素取出来构成新的序列. 用法: filter(function, iterable) 接受两个参数,第一个函数为过滤函数(返回True后者False ...

  8. 【CJOJ1372】【洛谷2730】【USACO 3.2.5】魔板

    题面 Description 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 我们知道魔板的每一个方格都有一种颜色 ...

  9. Kruskal重构树(货车运输)

    ... 和Kruskal生成树一样 本来是u,v连一条f的边 现在变成新建一个点,点权为f,u v都像它连无边权的边 (实际上应该是u的根和v的根) 这样树有一些性质: 1.二叉树 2.原树与新树两点 ...

  10. 最长k可重区间集问题

    费用流,离散化后,l向r连费用为负长度的边容量为1 相邻的连容量为k的边,最好建S和T # include <bits/stdc++.h> # define RG register # d ...