纯手工打造linux路由器

对由器比较了解的朋友都知道,很多专业级的路由器,也就是用linux系统来做的,那既然如此,如何使用linux主机打造一个路由器了。其实也不难,但我们得首先搞楚路由器的工作原理,说白了路由器也就是两个不同的网络之间转发数据之用的。如果没有路由器,只能在各自的网络内互相通信,跨网络就访问不了了。因为它们之间是相互隔离的,必须要有一个桥梁才能让它们之间正常来往。今天就给大家分享如何使用两台linux主机来打造一台路由器。

一、环境需求

1、两台双网卡主机

2、操作系统:安装Centos7.2

二、路由要求:实现A网络和B网络的通信

A网络:192.168.1.0/24

B网络:192.168.2.0/24

路由器的网络:192.168.0.0/24

三、配置思路

  第一台linux主机(R1):

第一块网卡——A网络的网关(内网接口):192.168.1.254

第二块网卡——A网络的出口(外网接口):192.168.0.1

  第二台linux主机(R2):

第一块网卡——B网络的网关(内网接口):192.168.2.254

第二块网卡——B网络的出口(外网接口):192.168.0.2

四、具体配置步骤

第一步:配置两台主机的网卡(每台主机两张网卡,需要配置四次)

  (一)R1的网卡配置

[[email protected] network-scripts]# ip link

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

2: eno16777728: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000

link/ether 00:0c:29:13:4b:5f brd ff:ff:ff:ff:ff:ff

3: eno33554960: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000

link/ether 00:0c:29:13:4b:69 brd ff:ff:ff:ff:ff:ff

4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT

link/ether 52:54:00:3a:39:12 brd ff:ff:ff:ff:ff:ff

5: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN mode DEFAULT qlen 500

link/ether 52:54:00:3a:39:12 brd ff:ff:ff:ff:ff:ff

[[email protected] network-scripts]# vim ifcfg-eno16777728

[[email protected] network-scripts]# cat ifcfg-eno16777728

DEVICE=eno16777728

BOOTPROTO=none

IPADDR=192.168.1.254

PREFIX=24

[[email protected] network-scripts]# vim ifcfg-eno33554960

[[email protected] network-scripts]# cat ifcfg-eno33554960

DEVICE=eno33554960

BOOTPROTO=none

IPADDR=192.168.0.1

PREFIX=24

[[email protected] network-scripts]#

  (二)R2的网卡配置

[[email protected] network-scripts]#  ip link

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

2: eno16777728: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000

link/ether 00:0c:29:6f:d4:c5 brd ff:ff:ff:ff:ff:ff

3: eno33554960: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000

link/ether 00:0c:29:6f:d4:cf brd ff:ff:ff:ff:ff:ff

4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT

link/ether 52:54:00:3a:39:12 brd ff:ff:ff:ff:ff:ff

5: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN mode DEFAULT qlen 500

link/ether 52:54:00:3a:39:12 brd ff:ff:ff:ff:ff:ff

[[email protected] network-scripts]# vim ifcfg-eno16777728

[[email protected] network-scripts]# cat ifcfg-eno16777728

DEVICE=eno16777728

BOOTPROTO=none

IPADDR=192.168.2.254

PREFIX=24

[[email protected] network-scripts]# vim ifcfg-eno33554960

[[email protected] network-scripts]# cat ifcfg-eno33554960

DEVICE=eno33554960

BOOTPROTO=none

IPADDR=192.168.0.2

PREFIX=24

[[email protected] network-scripts]#

第二步:配置两台主机的路由表

  (一)R1的路由表配置

[[email protected] network-scripts]# echo "192.168.2.0/24 via 192.168.0.2" > route-eno33554960

[[email protected] network-scripts]# cat route-eno33554960

192.168.2.0/24 via 192.168.0.2

[[email protected] network-scripts]#

  (二)R2的路由表配置

[[email protected] network-scripts]# echo "192.168.1.0/24 via 192.168.0.1" > route-eno33554960

[[email protected] network-scripts]# cat route-eno33554960

192.168.1.0/24 via 192.168.0.1

[[email protected] network-scripts]#

第三步:开启两台主机的路由转发功能

  (一)开启R1的路由转发功能

[[email protected] network-scripts]# cat /proc/sys/net/ipv4/ip_forward

0

[[email protected] network-scripts]# echo 1 > /proc/sys/net/ipv4/ip_forward

[[email protected] network-scripts]#

  (二)开启R2的路由转发功能

[[email protected] network-scripts]# cat /proc/sys/net/ipv4/ip_forward

0

[[email protected] network-scripts]# echo 1 > /proc/sys/net/ipv4/ip_forward

[[email protected] network-scripts]#

第四步:重启两台已经配置好的路由器,并验证两台路由器之间的通信

  (一)重启R1

[[email protected] network-scripts]# systemctl restart network

[[email protected] network-scripts]# ifconfig

eno16777728: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

inet 192.168.1.254  netmask 255.255.255.0  broadcast 192.168.1.255

inet6 fe80::20c:29ff:fe13:4b5f  prefixlen 64  scopeid 0x20<link>

ether 00:0c:29:13:4b:5f  txqueuelen 1000  (Ethernet)

RX packets 21778  bytes 1755783 (1.6 MiB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 1569  bytes 206822 (201.9 KiB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eno33554960: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

inet 192.168.0.1  netmask 255.255.255.0  broadcast 192.168.0.255

inet6 fe80::20c:29ff:fe13:4b69  prefixlen 64  scopeid 0x20<link>

ether 00:0c:29:13:4b:69  txqueuelen 1000  (Ethernet)

RX packets 19431  bytes 1527793 (1.4 MiB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 94  bytes 10757 (10.5 KiB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

inet 127.0.0.1  netmask 255.0.0.0

inet6 ::1  prefixlen 128  scopeid 0x10<host>

loop  txqueuelen 0  (Local Loopback)

RX packets 8  bytes 688 (688.0 B)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 8  bytes 688 (688.0 B)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500

inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255

ether 52:54:00:3a:39:12  txqueuelen 0  (Ethernet)

RX packets 0  bytes 0 (0.0 B)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 0  bytes 0 (0.0 B)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[[email protected] network-scripts]#

  (二)重启R2

[[email protected] network-scripts]# systemctl restart network

[[email protected] network-scripts]# ifconfig

eno16777728: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

inet 192.168.2.254  netmask 255.255.255.0  broadcast 192.168.2.255

inet6 fe80::20c:29ff:fe6f:d4c5  prefixlen 64  scopeid 0x20<link>

ether 00:0c:29:6f:d4:c5  txqueuelen 1000  (Ethernet)

RX packets 20833  bytes 1658328 (1.5 MiB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 1372  bytes 217031 (211.9 KiB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eno33554960: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

inet 192.168.0.2  netmask 255.255.255.0  broadcast 192.168.0.255

inet6 fe80::20c:29ff:fe6f:d4cf  prefixlen 64  scopeid 0x20<link>

ether 00:0c:29:6f:d4:cf  txqueuelen 1000  (Ethernet)

RX packets 18938  bytes 1480549 (1.4 MiB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 81  bytes 9518 (9.2 KiB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

inet 127.0.0.1  netmask 255.0.0.0

inet6 ::1  prefixlen 128  scopeid 0x10<host>

loop  txqueuelen 0  (Local Loopback)

RX packets 8  bytes 688 (688.0 B)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 8  bytes 688 (688.0 B)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500

inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255

ether 52:54:00:3a:39:12  txqueuelen 0  (Ethernet)

RX packets 0  bytes 0 (0.0 B)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 0  bytes 0 (0.0 B)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[[email protected] network-scripts]#

  (三)用R1 ping R2

[[email protected] network-scripts]# ping -c3 192.168.0.2

PING 192.168.0.2 (192.168.0.2) 56(84) bytes of data.

64 bytes from 192.168.0.2: icmp_seq=1 ttl=64 time=15.4 ms

64 bytes from 192.168.0.2: icmp_seq=2 ttl=64 time=1.23 ms

64 bytes from 192.168.0.2: icmp_seq=3 ttl=64 time=1.31 ms

--- 192.168.0.2 ping statistics ---

3 packets transmitted, 3 received, 0% packet loss, time 2018ms

rtt min/avg/max/mdev = 1.238/6.003/15.453/6.682 ms

[[email protected] network-scripts]# ping -c3 192.168.2.254

PING 192.168.2.254 (192.168.2.254) 56(84) bytes of data.

64 bytes from 192.168.2.254: icmp_seq=1 ttl=64 time=0.912 ms

64 bytes from 192.168.2.254: icmp_seq=2 ttl=64 time=1.27 ms

64 bytes from 192.168.2.254: icmp_seq=3 ttl=64 time=1.90 ms

--- 192.168.2.254 ping statistics ---

3 packets transmitted, 3 received, 0% packet loss, time 2022ms

rtt min/avg/max/mdev = 0.912/1.364/1.903/0.409 ms

[[email protected] network-scripts]#

  (四)用R2 ping R1

[[email protected] network-scripts]# ping -c3 192.168.0.1

PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.

64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=0.572 ms

64 bytes from 192.168.0.1: icmp_seq=2 ttl=64 time=0.951 ms

64 bytes from 192.168.0.1: icmp_seq=3 ttl=64 time=0.822 ms

--- 192.168.0.1 ping statistics ---

3 packets transmitted, 3 received, 0% packet loss, time 2029ms

rtt min/avg/max/mdev = 0.572/0.781/0.951/0.160 ms

[[email protected] network-scripts]# ping -c3 192.168.1.254

PING 192.168.1.254 (192.168.1.254) 56(84) bytes of data.

64 bytes from 192.168.1.254: icmp_seq=1 ttl=64 time=6.78 ms

64 bytes from 192.168.1.254: icmp_seq=2 ttl=64 time=0.962 ms

64 bytes from 192.168.1.254: icmp_seq=3 ttl=64 time=1.14 ms

--- 192.168.1.254 ping statistics ---

3 packets transmitted, 3 received, 0% packet loss, time 2026ms

rtt min/avg/max/mdev = 0.962/2.963/6.785/2.703 ms

[[email protected] network-scripts]#

第五步:配置windows主机做为A网络的PC1,配置另一台liunx主机做为B网络的PC2,分别用测试路由效果

  (一)PC1-->A网络的windows7

C:\Users\Administrator>ipconfig

Windows IP 配置

以太网适配器 本地连接:

连接特定的 DNS 后缀 . . . . . . . :

IPv4 地址 . . . . . . . . . . . . : 192.168.1.125

子网掩码  . . . . . . . . . . . . : 255.255.255.0

默认网关. . . . . . . . . . . . . : 192.168.1.254

隧道适配器 isatap.{CCC82E88-7D5E-4564-B569-27B6A5DE9C48}:

媒体状态  . . . . . . . . . . . . : 媒体已断开

连接特定的 DNS 后缀 . . . . . . . :

C:\Users\Administrator>

  (二)PC2-->B网络的Centos7.2

[[email protected] ~]# cat /etc/sysconfig/network-scripts/

cat: /etc/sysconfig/network-scripts/: Is a directory

[[email protected] ~]# cat /etc/sysconfig/network-scripts/ifcfg-eno16777728

DEVICE=eno16777728

BOOTPROTO=none

IPADDR=192.168.2.125

PREFIX=24

GATEWAY=192.168.2.254

[[email protected] ~]# ifconfig

eno16777728: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

inet 192.168.2.125  netmask 255.255.255.0  broadcast 192.168.2.255

inet6 fe80::20c:29ff:fe06:f987  prefixlen 64  scopeid 0x20<link>

ether 00:0c:29:06:f9:87  txqueuelen 1000  (Ethernet)

RX packets 1359  bytes 98258 (95.9 KiB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 136  bytes 12455 (12.1 KiB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

inet 127.0.0.1  netmask 255.0.0.0

inet6 ::1  prefixlen 128  scopeid 0x10<host>

loop  txqueuelen 0  (Local Loopback)

RX packets 16  bytes 1072 (1.0 KiB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 16  bytes 1072 (1.0 KiB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[[email protected] ~]#

  (三)现在用A网络的PC1(192.168.1.125/24) ping B网络的PC2(192.168.2.125/24)

C:\Users\Administrator>ping 192.168.2.125

正在 Ping 192.168.2.125 具有 32 字节的数据:

来自 192.168.2.125 的回复: 字节=32 时间=1ms TTL=62

来自 192.168.2.125 的回复: 字节=32 时间=2ms TTL=62

来自 192.168.2.125 的回复: 字节=32 时间=3ms TTL=62

来自 192.168.2.125 的回复: 字节=32 时间=2ms TTL=62

192.168.2.125 的 Ping 统计信息:

数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),

往返行程的估计时间(以毫秒为单位):

最短 = 1ms,最长 = 3ms,平均 = 2ms

C:\Users\Administrator>

经过两个路由器,所以TTL变成62(64-2)

  (四)再用B网络的PC2(192.168.2.125/24)ping A网络的PC1(192.168.1.125/24)

[[email protected] ~]# ping -c4 192.168.1.125

PING 192.168.1.125 (192.168.1.125) 56(84) bytes of data.

64 bytes from 192.168.1.125: icmp_seq=1 ttl=62 time=1.39 ms

64 bytes from 192.168.1.125: icmp_seq=2 ttl=62 time=1.19 ms

64 bytes from 192.168.1.125: icmp_seq=3 ttl=62 time=2.03 ms

64 bytes from 192.168.1.125: icmp_seq=4 ttl=62 time=2.12 ms

--- 192.168.1.125 ping statistics ---

4 packets transmitted, 4 received, 0% packet loss, time 3008ms

rtt min/avg/max/mdev = 1.198/1.689/2.126/0.402 ms

[[email protected] ~]#

经过两个路由器,所以TTL同样的是62

    原本属于两个不同网络的PC1和PC2是不能通信的,现在有了刚才搭建的路由器(R1+R2),它们就可以正常通信了。

传说中的路由器也就是这么工作的,当然这只是给大家展示了一下路由器的工作原理,同时这也只是静态路由的情况,动态路由就比静态路由要复杂的多了。

时间: 2024-12-18 23:12:23

纯手工打造linux路由器的相关文章

一年纯手工打造的Java老A上册开始预售了

Java老A这本书写了很久,昨天终于开始在china-pub上开始预售了,其它网站可能会慢一点,不过既然叫预售,就肯定还没到货. 有兴趣的人可以去看看哈(后续其它网站地址也会在这里公开): http://search.china-pub.com/s/?key1=java%cc%d8%d6%d6%b1%f8&type=&pz=1 关于本书内容,请参考:http://blog.csdn.net/xieyuooo/article/details/38373409 里面有本书的所有目录信息,封面等

IOS学习之道:使用UIButton纯手工打造的黑白快小游戏.

由于代码量比较多,有兴趣的同学可以去我的资源页进行下载. http://download.csdn.net/detail/tx874828503/8637445 使用UIButton纯手工打造的黑白快小游戏.请勿商业使用,转载请注明出处,谢谢

手写MyBatis,纯手工打造开源框架(第四篇:决胜千里)- 第272篇

说明 MyBatis版本:3.5.1 相关历史文章(阅读本文之前,您可能需要先看下之前的系列) Spring Boot MyBatis最全教程:你值得拥有MyBatis能脱离Spring吗一图纵览MyBatis的工作原理从源码看MyBatis,竟如此简单MyBatis的Mapper是什么`垃圾` 手写MyBatis,纯手工打造开源框架(第一篇:风云再起) 手写MyBatis,纯手工打造开源框架(第二篇:君临天下) 手写MyBatis,纯手工打造开源框架(第三篇:运筹帷幄) 前言        运

纯手工打造简单分布式爬虫(Python)

前言 这次分享的文章是我<Python爬虫开发与项目实战>基础篇 第七章的内容,关于如何手工打造简单分布式爬虫 (如果大家对这本书感兴趣的话,可以看一下 试读样章),下面是文章的具体内容. 本章讲的依旧是实战项目,实战内容是打造分布式爬虫,这对初学者来说,是一个不小的挑战,也是一次有意义的尝试.这次打造的分布式爬虫采用比较简单的主从模式,完全手工打造,不使用成熟框架,基本上涵盖了前六章的主要知识点,其中涉及分布式的知识点是分布式进程和进程间通信的内容,算是对Python爬虫基础篇的总结. 现在

网友纯手工打造摇摆LED时钟 ,牛!

手工打造摇摆LED时钟 ,牛! 摇摆LED 时钟,感觉非常新颖独特,正在玩单片机的我,激起了自己也想DIY 一个的冲动.不就是一个流水灯吗?有什么难的?! 于是,一个单片机项目就这样开始了.然而动手以后才知道问题并非想象那样简单,因没有任何现成的资料,机械的.电子的和编程的问题一大堆,一个一个需要自己来解决.经历二十多天的苦战和无数次的修改与调试,作品终于完成,基本达到预先要求.    现将制作资料整理出来,与广大DIY 爱好者分享. 一. 整体方案    本制作是根据视觉暂留原理, 让一排8

利用openGL纯手工打造一个金字塔

环境:linux(ubuntu16.4).gcc 第一步:先出一个三角形线框 效果: 实现代码: Makefile BDIR = -L/usr/X11R6/lib CC = gcc CFLAGS = $(COMPILERFLAGS) LIBRARIES = -lX11 -lXi -lglut -lGL -lGLU -lm pyramid : pyramid.o $(CC) $(CFLAGS) -o [email protected] $(LIBDIR) $? $(LIBRARIES) clean

纯手工打造(不使用IDE)java web 项目

必备环境 1.编译器:jdk 2.web服务器:tomcat 3.文本编辑器:sublime,编写java文件和jsp文件,没有的话用记事本也行. 一.建立工程目录结构,如下图 在操作系统下完成即可,如在D盘根目录下建立如上结构 二.在“src/com/zyz”目录建立model类文件 Dog.java package com.zyz; public class Dog { private String name; public String getName(){ return this.nam

七夕节送礼不用愁,妹妹爱物多多,不妨进来看看,纯手工作品,价格优惠 ^^*

首语谐音手语,手的语言,即用最真心.纯手工打造的妹妹爱物—— ------------------------------------------------------ 每到各种节日,加班到吐血的IT男们,总是没什么时间准备礼物给女朋友,偶尔想起又不知道送什么的好,女朋友虽然心里不说,多少有些难过.现在推荐老婆的羊毛毡手工店,每一件都是亲手制作,特别是可以个性定制,女朋友收到一定很喜欢.我就是这么哄老婆的,嘿嘿 ^^* -------------------------------------

linux路由器

在tcp/ip网络中,路由是一个非常重要的概念,所谓路由,就是通过互联的网络把信息从原地址传输到目的地址. 路由器的原理 路由器的原理非常的复杂.一般情况下,网络中的主机,路由器和交换机都具有路由的功能.这些设备收到数据包之后,要根据IP数据包的目标地址,决定选择 那个网络接口把数据包传送出去.如果路由器的某个网络接口与IP数据包的目的主机位于同一个局域网,则可以直接通过该接口把数据包传送到目的主机:如果目的主机 与路由器不位于同一个局域网中,则路由器会根据目的地址来选择另一台合适的路由器,再从