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. HI3531的nand flash测试

    void NAND_Init() {    *(unsigned int *)(0x20030000 + 0xd0) = 7; delay_x(0X5000);    *(unsigned int * ...

  2. JLINK 10针J和20针JTAG接口连接方法

    我的JLINK终于用上了,哈哈,好开心,终于不用考虑是不是要借用别人的PC机了,昨天到城隍庙电子市场忙活了一下午,终于算是满载而归,呵呵,好了,下面说一下接法,其实根本不需要什么转接板什么的,直接把相 ...

  3. AndroidDevTools

    收集整理Android开发所需的Android SDK.开发中用到的工具.Android开发教程.Android设计规范,免费的设计素材等. 欢迎大家推荐自己在Android开发过程中用的好用的工具. ...

  4. live555编译环境

    Ⅰ live555简介 Live555 是一个为流媒体提供解决方案的跨平台的C++开源项目,它实现了对标准流媒体传输协议如RTP/RTCP.RTSP.SIP等的支持.Live555实现了对多种音视频编 ...

  5. No bean named 'sessionFactory' is defined

    1.错误描述 严重:Servlet service() for servlet default threw exception . org.springframework.beans.factory. ...

  6. Linux显示系统的诊断信息

    Linux显示系统的诊断信息 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ dmesg [ 1.492480] EDD information not ava ...

  7. RAPIDIO高速串行协议

    RapidIO是由Motorola和Mercury等公司率先倡导的一种高性能. 低引脚数. 基于数据包交换的互连体系结构,是为满足和未来高性能嵌入式系统需求而设计的一种开放式互连技术标准.RapidI ...

  8. dtls_srtp学习笔记

    注:以下为rfc5764的学习笔记,不保证完全正确. DTLS-SRTP是DTLS的一个扩展,将SRTP加解密与DTLS的key交换和会话管理相结合.从SRTP的角度看,是为其提供一种新的key协商管 ...

  9. Struts2入门这一篇就够了

    前言 这是Strtus的开山篇,主要是引入struts框架...为什么要引入struts,引入struts的好处是什么,以及对Struts2一个简单的入门.... 为什么要引入struts? 既然Se ...

  10. 如何解决 touchstart 事件与 click 事件的冲突

    一 · 业务场景的描述 在对已完成的PC站点进行移动端适配时,我们想要站点在移动设备上有更快的响应速度,以带给用户更好的体验,此时,我们应该使用移动设备专用的事件系统,例如,使用 touchstart ...