≡菜单

7 Linux路由命令示例(如何在Linux中添加路由)

在IP路由系列的第一部分中,我们了解了 Linux IP路由的基础.

Route命令用于显示/操作IP路由表。它主要用于设置通过接口到特定主机或网络的静态路由。

在本文中,我们将看到如何使用route命令在Linux中操作路由表。

We’首先,我们将通过一些基本的route命令示例来说明如何进行路由,然后我们’将使用示例网络体系结构说明有关如何在网络中设置路由的信息。

I.如何进行路由?

1.显示现有路线

默认情况下,route命令将显示内核路由表条目的详细信息。在此示例中,正在执行route命令的系统的IP地址为192.168.1.157

$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     *               255.255.255.0   U     0      0        0 eth0

上面的命令显示目标是否在网络范围192.168.1.0中–192.168.1.255,则网关为*,即0.0.0.0。

当在此IP范围内发送数据包时,将通过ARP协议找到目标的MAC地址,并将数据包发送到该MAC地址。

如果你不这样做’不知道什么是ARP,首先应该了解 ARP协议如何工作.

为了将数据包发送到不在此ip范围内的目的地,数据包将被转发到默认网关,该网关决定该数据包的进一步路由。我们很快就会看到。

默认情况下,route命令在其输出中显示主机名。我们可以要求它使用-n选项显示数字IP地址,如下所示。

$ 路线-n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
0.0.0.0         192.168.1.10    0.0.0.0         UG    0      0        0 eth0

2.添加默认网关

我们可以指定不在网络中的数据包必须转发到网关地址。

The following 路线添加 command will set the default gateway as 192.168.1.10.

$ 路线添加 default gw 192.168.1.10

现在route命令将显示以下条目。

$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     *               255.255.255.0   U     0      0        0 eth0
default         gateway.co.in   0.0.0.0         UG    0      0        0 eth0

现在,我们刚刚向计算机添加了默认网关。要验证其是否正常运行,请对某些外部主机(例如google.com)执行ping操作以发送ICMP数据包。

$ ping www.google.com

以下是执行上述ping命令时发生的一系列事件。

  1. 首先,它将查询DNS服务器以获取google.com的IP地址(例如:74.125.236.34)
  2. 目的地址(74.125.236.34)不在网络范围内。
  3. 因此,在第3层(IP标头)中,DESTINATION IP将设置为“74.125.236.34”.
  4. 在第2层中,将以默认网关(192.168.1.10的MAC地址)填充DESTINATION MAC地址。’的MAC)。如前所述,将通过使用ARP找到MAC。
  5. 发送数据包时,网络交换机(在第2层上工作)将数据包发送到默认网关,因为目标MAC是网关的目标MAC。
  6. 网关根据其路由表接收到数据包后,将进一步转发数据包。

上面的两个示例可以很好地说明如何在网络内完成路由。现在,我们将看到route命令可用的其他命令行选项。

3.列出内核’路由缓存信息

内核维护路由缓存信息以更快地路由数据包。我们可以列出内核’通过使用-C标志来路由缓存信息。

$ route -Cn
Kernel IP routing cache
Source          Destination     Gateway         Flags Metric Ref    Use Iface
192.168.1.157   192.168.1.51    192.168.1.51          0      0        1 eth0
192.168.1.157   74.125.236.69   192.168.1.10          0      0        0 eth0
.
.
.

4.拒绝路由到特定主机或网络

Sometimes we may want to 拒绝 routing the packets to a particular host/network. To do that, add the following entry.

$ 路线添加 -host 192.168.1.51 拒绝

As you see below, we cannot access that particular host (i.e .51 host that we just 拒绝ed).

$ ping 192.168.1.51
connect: Network is unreachable

但是,我们仍然可以访问网络中的其他主机(例如,仍然可以访问.52主机)。

$ ping 192.168.1.53
PING 192.168.1.53 (192.168.1.53) 56(84)  通过 tes of data.
64  通过 tes from 192.168.1.53: icmp_seq=1 ttl=64 time=7.77 ms

If you want to 拒绝 an entire network ( 192.168.1.1 –192.168.1.255),然后添加以下条目。

$ 路线添加 -net 192.168.1.0 netmask 255.255.255.0 拒绝

现在,您无法访问该网络中的任何主机(例如:.51,.52,.53等)

$ ping 192.168.1.51
connect: Network is unreachable

$ ping 192.168.1.52
connect: Network is unreachable

$ ping 192.168.1.53
connect: Network is unreachable

二。示例网络架构(了解路由)

对于其余示例,让我们使用以下示例网络体系结构。

在下图中,我们有2个单独的网络(192.168.1.0和192.168.3.0,子网掩码为255.255.255.0)。

我们也有一个“GATEWAY”带有3个网卡的计算机。第一张卡连接到192.168.1.0,第二张卡连接到192.168.3.0,第三张卡连接到外部环境。

5.使192.168.3。*可从192.168.1。*访问。

Now we need to add a routing entry such that we are able to ping 192.168.3. series ip-addresses from 192.168.1. series. The common point we have is the 网关 machine.

因此,在192.168.1。*网络中的每台计算机上,将添加一个默认网关,如下所示。

$ 路线添加 default gw 192.168.1.10

Now when 192.168.1.1 pings 192.168.3.1, it will go to the 网关 via 192.168.1.10.

In 网关, add the following routing entry.

$ 路线添加 -net 192.168.3.0 netmask 255.255.255.0 gw 192.168.3.10

现在,所有寻址到192.168.3。*网络的数据包都将通过192.168.3.10接口转发,该接口随后将数据包传递到寻址的计算机。

6.使192.168.1。*可从192.168.3访问。*

这与我们之前所做的非常相似。

因此,在192.168.3。*网络中的每台计算机上,将添加一个默认网关,如下所示。

$ 路线添加 default gw 192.168.3.10

In 网关, add the following routing entry.

$ 路线添加 -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.10

现在192.168.3。*机器可以ping 192.168.1。*机器。

7.允许Internet访问(外部世界)

在前两个示例中,我们将两个不同的网络互连在一起。

现在,我们需要从这两个不同的网络访问Internet。为此,我们可以将默认路由(当没有任何路由规则匹配时)添加到125.250.60.59,该路由如下所示连接到外部世界。

$ 路线添加 default gw 125.250.60.59

它是这样工作的:

  1. 现在,当您尝试从任何一台计算机(例如,从192.168.3.2)访问Internet(例如:ping google.com)时,以下是发生的事件序列。
  2. Since the destination (google.com) is not within 3.* series, it will be forwarded to 网关 via 3.10 interface
  3. In 网关, it checks whether the destination is within 1.* range. In this example, it is not.
  4. It then checks whether the destination 在2. *范围内. IN this example, it is not
  5. 最后,它采用默认路由转发数据包(即使用连接到外部世界的125.250.60.59接口)。

如果您喜欢这篇文章,您可能还会喜欢..

  1. 50个Linux Sysadmin教程
  2. 50个最常用的Linux命令(包括示例)
  3. 排名前25位的最佳Linux性能监视和调试工具
  4. 妈妈,我找到了! – 15个实用的Linux Find命令示例
  5. Linux 101 Hacks第二版电子书 Linux 101黑客手册

Bash 101 Hacks书 Sed和Awk 101黑客手册 Nagios Core 3书 Vim 101黑客手册

{ 56 评论… 加一 }

  • 林库 2012年4月30日,上午4:12

    做得好

  • 钢铁侠 2012年4月30日,上午6:29

    我不’不知道需要多少时间来淘汰ifconfig + route iproute2,但人们学习iproute2创建路由的方法并不难,因为逻辑基本相同,因此需要更改一些“words”在命令sintax上。 --

  • 鲍勃 2012年4月30日,上午7:32

    谢谢。今天学到了一些东西。

  • 贾拉尔·哈吉霍拉玛利 2012年4月30日,上午7:39

    你好

    有用的文章…

    非常感谢

  • ak牛 2012年4月30日,上午9:14

    写得好。一个错字–在最后的第4点,“is within 2.* range” should be “is within 3.* range”

  • 抄写 2012年4月30日,下午1:53

    我更喜欢iproute2,它更加灵活和强大。

  • 粘土 2012年4月30日,晚上8:37

    大量的文章。
    another option: IP路由[add|change|replace]

  • 皮埃尔·B。 2012年5月1日,上午1:04

    是的TGS再次罢工!

    感谢您的本教程,以及对iproute2的评论,我显然也需要学习这一内容。

  • 苏达山 2012年5月1日,上午9:39

    非常感谢….

  • 伊万·卡拉斯科(IvánCarrasco)Quiroz 2012年5月1日,晚上11:19

    Iproute2的小结:

    代替“路由添加-net IP网络掩码MASk gw IP” you should enter
    “ip 路线添加 IP/MASk via IP”.
    另一个可以用来替换的命令“route -n” is “ip route show”.
    要设置默认网关,请使用:“ip 路线添加 default via IP”,最后删除一条路线,请使用:“ip route del IP/MASK”.

    祝好运
    🙂

  • 尼拉吉 2012年5月2日,上午12:50

    创建多个网关并路由相同网关确实是一个好选择。

  • 沙尚克·戈萨维(Shashank Gosavi) 2012年5月2日,上午6:02

    Thnx好友介绍新命令…

  • 特德斯基 2012年5月2日,上午8:05

    提醒您,添加这些静态路由不会使它们在系统重新引导后保持不变。确保将这些更改提交到分发中的相关文件,以使这些更改持久化。

  • 阿西 2012年5月2日,上午8:31

    不错,但是在linux重新启动后,所有路由表都消失了,要解决这个问题:

    1.建立通话“route-eth0”nano -w中的文件/ etc / sysconfig / network-scripts / 路线eth0
    2.将以下行保存到文件中:
    地址0 = 10.0.0.0
    NETMASK0 = 255.255.0.0
    网关0=192.168.0.1
    如果有更多路由,则将ADD,NET,GAT的范围更改为1等….
    样品:
    路线1
    地址0 = 10.100.0.0
    NETMASK0 = 255.255.0.0
    网关0=192.168.0.1

    2路
    地址1 = 10.200.0.0
    NETMASK1 = 255.255.0.0
    网关1= 192.168.0.1

    重新启动并成功保存路由。

  • 伊凡·卡拉斯科(Ivan Carrasco Quiroz) 2012年5月2日,上午8:56

    谢谢阿西,小费!
    无论如何,您可以编辑/etc/rc.local并插入命令“ip route …”,它将在开始时加载您的路线。

    🙂

  • 阿西 2012年5月2日,上午9:58

    谢谢伊万-
    我出于某种原因无法将这一行(“ ip route…”,)添加到具有RH / CentOS的生产服务器中。
    然后我创建文件“route-eth0”它像魔术一样运作。

  • 伊凡·卡拉斯科(Ivan Carrasco Quiroz) 2012年5月2日,下午4:50

    尝试“apt-get安装iproute” (DEB/UBUNTU) or “yum install iproute”(CENTOS)。也许您的发行版没有安装软件包。

    🙂

  • 鲍勃 2012年5月4日,上午8:23

    在示例中“reject”,您可能想要显示route命令的转储,以便我们可以看到条目的外观。

    在上面的示例网络中,配置完所有内容后,您可能希望显示转储“route -n”在这三个节点的每个节点上,这样我们就可以一目了然地看到一切。

  • 拉姆塞 2012年5月15日,下午7:46

    In step 7, where do we add the default route? in 网关 上 ly?
    $ 路线添加 default gw 125.250.60.59

  • 匿名 2012年10月15日,上午3:13

    很棒,非常感谢

  • 普里亚 2012年10月25日,晚上11:46

    好文章!

  • 纳古纳姆 2012年11月1日,上午10:09

    补充文章!!!

  • 阿里比利斯 2012年11月6日,上午9:13

    你好
    我不t understand this part :
    ——–
    4. It then checks whether the destination 在2. *范围内. IN this example, it is not
    ——–
    为什么要检查2. *范围? 2. *应该是3. *吗?

  • 明显 2012年11月25日,下午3:59

    @alieblice:它’s a typo. It IS 3

  • 吉里什 2012年11月29日,上午3:29

    很棒的工作谢谢您的信息

  • 马里库 2013年2月3日,晚上10:26

    做得好,简洁明了!

  • 比拉勒·阿里(Bilal Ali) 2013年2月10日,下午2:23

    我认为这是我产生路由恐惧症的原因。
    现在消失了。
    感谢您一步一步的说明,这对初学者很有帮助。

  • 桑托什洛克 2013年2月19日,上午4:36

    很好的解释!
    谢谢。

  • 吉里 2013年2月27日,下午11:02

    在上面的示例中:
    4.拒绝路由到特定主机或网络

    How do i undo the block? i mean later if the IP which is 拒绝ed,needs to be accepted,then what command we need to use?

  • 匿名 2013年4月30日,上午8:59

    IP路由del

  • 洗发水 2013年5月22日,上午11:08

    在步骤5和6中,为什么在网关上将路由添加到本地子网(.1和.3)。那有必要吗?

  • 贝切萨 2013年6月2日,上午2:25

    @Shamso:是的,以便两个不同的子网能够相互通信。

  • 肖恩 2013年6月20日,晚上9:15

    为什么要指定步骤#7
    $ 路线添加 default gw 125.250.60.59
    ??

    仅当您从ISP分配了静态IP并使用它时,这才是正确的,否则您的调制解调器接口(无论如何,我都喜欢使用eth0)应设置为DHCP,并且您必须从网关中伪装出来机器,它应该是一个防火墙/路由器/ DHCP / DNS服务器合而为一,以保护和巩固整个局域网。使它更容易。

  • 哈维尔·塔伦斯 2013年7月15日,上午5:14

    很好的解释。做得好! --

  • 维纳·库玛 2013年8月7日,上午1:02

    你好

    我想在centos中添加一个虚拟网关,我有两个网卡,并在eth1上分配了一个静态IP地址,而在eth1上分配了网关,而第二个本地IP地址却在eth0上未添加网关

    i have created 上 e file 路线eth0 (/etc/sysconfig/network-scripts)
    为路线添加了三行
    地址0 = 192.168.3.3
    NETMASK0 = 255.255.255.0
    网关0=192.168.3.51
    when i staring the service i am getting error Bringing up interface eth0: RTNETLINK answers: Invalid argument and it is not showing gateway thorugh this command 路线-n

    请同样帮我

  • 伊万卡卡拉斯科 2013年8月8日,上午10:39

    维纳·库玛,您好,

    我认为您应该在CentOS上使用:
    [root @ corporativo〜]#cat / etc / sysconfig / network-scripts / ifcfg-eth0
    DEVICE = eth0
    BOOTPROTO =无
    ONBOOT =是
    IPADDR = 192.168.3.3
    NETMASK = 255.255.255.0
    网关=192.168.3.51

    无论如何,我建议您首先尝试使用浮动地址/网关进行配置。
    #ip addr add 192.168.3.3/24 dev eth0
    # ip 路线添加 default via 192.168.3.51

    您可以将其加载到/etc/rc.local
    你想让我做什么?

    最好的祝福,
    伊万·卡拉斯科·奎罗兹(IvánCarrasco Quiroz)。

  • 尼诺 2013年8月14日,上午5:56

    嗨,我的工作真的很棒,我试图在Openstack中使用VM来实现示例网络,但似乎可以相互ping通网络,尽管它们都可以ping通我用作网关的VM,但可能会有所帮助是我可以在所有VM情况下实施的原因

  • 阿比 2013年9月17日,上午2:15

    非常感谢,尽管我经常使用路线,但有些疑问。
    需要详细的信息第1部分充满了基础知识,第2部分得到了示例的良好支持非常感谢

  • 湿婆 2014年1月8日,上午10:51

    嗨Laxmanan
    很好的解释,在我的情况下不起作用,
    你能找出错误在哪里吗

    防火墙(ISP 101.202.100.201和本地192.168.0.0)网关192.168.0.1
    |
    网关节点(网络10.3.61.0和192.168.0.0)
    |
    具有网关10.3.61.1的内部网络(10.3.61.0)

    我可以使用192.168.0.1的代理ip访问网关节点上的Internet

    我无法从内部网络ping 192.168.0.1。我按照您在体系结构图中指定的设置进行了设置。
    我能够从内部网络ping 10.1.1.1 gw上的网关节点。

    我想从内部网络访问Internet,并希望来自内部网络的所有流量都将通过网关节点。

    请让我知道是否也可以通过其他方式实现。
    提前致谢….

  • 迈克 2014年1月31日,下午2:33

    好吧,我’我试图做这个完全相同的设置,除了使用ipv6,我只是可以’似乎让Lan A与Lan B交谈

    这里’s my setup

    LAN A主机:2001 :: 2

    网关NicA:2001 :: 1
    尼克2000 :: 1

    Lan B主持人:2000 :: 2

    I’ve got the hosts’s gateway’d到我的网关。和我’能够粉刷网关上的网卡,但似乎无法使流量传递到其他网络。

  • 克里斯 2014年4月16日,下午5:39

    嗨,我已经阅读了很多有关nullrouting的评论和文档。我实际上有兴趣对我自己的IP之一进行空路由,并为其添加1个豁免。例如,我有一个具有3个IP的VPS,并且我希望1个IP地址为空路由,而其他2个像以前一样正常工作。据我所知,我只能将特定地址无效路由到我的IP。我想要的是将我的IP地址完全路由为任何其他外部IP地址,并且仅添加1个IP免税项。话虽如此,我有3个IP,我希望其中2个能像以前一样正常工作,但一个要被零路由到互联网,除了允许1个IP才能到达。
    谢谢,

    克里斯

  • 阿伦 2014年5月22日,上午4:48

    点1所示的屏幕截图实际上是点2的屏幕截图,反之亦然。好心检查。

  • 文卡特·格赫桑(Venkatt Guhesan) 2014年6月24日,上午9:00

    拉梅什–您可以在本文的#5和#6部分下添加以下注释吗?

    **在某些Linux版本中,默认情况下IP转发功能将关闭。因此,除了“route add” to make the “ping” work.

    这里 is how you enable the IP-Forwarding (on the 网关 box):
    #编辑/etc/sysctl.conf并将以下内容设置为“1”
    net.ipv4.ip_forward = 1#以前是零
    #重新启动网关。
    重新启动后,如果您尝试对其他网络上的IP执行ping操作,则现在可以“目标主机被禁止”,那么您需要在“网关”框中关闭iptables或防火墙规则(或添加规则以允许这些端口)。
    #如果您希望实时切换相同的ip_forward功能而无需重新启动网关,则可以通过以下方式进行操作:
    回声1>/ proc / sys / net / ipv4 / ip_forward
    #这会打开ip_forward开关,但是如果您重新启动,它将恢复为默认状态OFF(除非您在/etc/sysctl.conf中进行了更改)文件。

  • 最胜利 2015年2月7日,上午10:11

    I’m确定是否可以在单个NIC上设置多个IP,每个IP来自不同的子网,并具有自己的默认网关。

    要为多个域运行Postfix和Dovecot,每个域都具有OWN公共IP和FQDN和OWN MX

    这对您有意义吗?假设在防火墙,路由器等上已经处理好路由

    服务器A具有2个独立的NIC

    NIC1物理连接到LAN交换机
    DHCP上的eth0(专用IP)
    这很好

    NIC2物理连接到核心交换机
    eth1具有3个PUBLIC IP

    *注意:公共IP来自两个不同的子网,每个子网具有不同的网关

    自动eth1
    iface eth1 inet静态
    地址119.73.132.98
    网络掩码255.255.255.248
    post-up ip 路线添加 119.73.132.96/29 via 119.73.132.97
    post-up ip 路线添加 default via 119.73.132.97

    自动eth1:1
    iface eth1:1 inet静态
    地址203.126.43.134
    网络掩码255.255.255.240
    post-up ip 路线添加 203.126.43.128/28 via 203.126.43.129
    post-up ip 路线添加 default via 203.126.43.129

    自动eth1:2
    iface eth1:1 inet静态
    地址203.126.43.131
    网络掩码255.255.255.240

    假设FW规则允许访问,是否可以从Internet访问所有三个公共IP地址?

    I’m确定是否可以在单个NIC上设置多个IP,每个IP来自不同的子网,并具有自己的默认网关。

  • 最胜利 2015年2月7日,上午10:20

    对不起,最后一条消息。我没’t clear.

    这里’是我希望实现的目标。

    我想知道是否可以在单个NIC上设置多个IP,每个IP来自不同的子网,并具有自己的默认网关。

    目的是为多个域运行Postfix和Dovecot,每个域都具有OWN公共IP和FQDN和OWN MX

    这对您有意义吗?假设在防火墙,路由器等上已经处理好路由

    服务器A具有2个独立的NIC

    NIC1物理连接到LAN交换机
    DHCP上的eth0(专用IP)
    这很好

    NIC2物理连接到核心交换机
    eth1具有3个PUBLIC IP

    *注意:公共IP来自两个不同的子网,每个子网具有不同的网关

    在/ etc / iproute2 / rt_tables的末尾
    我添加以下内容

    1 rt2
    1 rt3

    然后在/ etc / network / interfaces…

    自动eth0
    iface eth0 inet dhcp

    自动eth1
    iface eth1 inet静态
    地址119.73.132.98
    网络掩码255.255.255.248
    post-up ip 路线添加 119.73.132.96/29 dev eth1 src 119.73.132.98 table rt2
    post-up ip 路线添加 default via 119.73.132.97 dev eth1 table rt2
    从119.73.132.96/29表rt2添加后置ip规则
    ip后规则添加到119.73.132.96/29表rt2

    自动eth1:1
    iface eth1:1 inet静态
    地址203.126.43.134
    网络掩码255.255.255.240
    post-up ip 路线添加 203.126.43.128/28 dev eth1:1 src 203.126.43.134 table rt3
    post-up ip 路线添加 default via 203.126.43.129 dev eth1:1 table rt3
    从203.126.43.128/28表rt3添加后置IP规则
    后续ip规则添加到rt.3表203.126.43.128/28

  • 阿列雷扎·古达兹 2015年4月17日,上午6:59

    tnx获取有用的信息

  • 志峰 2015年12月28日,上午1:49

    非常感谢您的教程。

  • 曼尼坎丹·索马桑达兰 2016年1月8日,上午3:41

    非常有用的文章,谢谢

  • 大卫 2016年4月14日,下午12:33

    不错的文章。但是,重新启动后我丢失了更改。我如何使更改永久生效,以使它们在重新启动或网络重新启动后不会消失。
    谢谢

  • 夏姆 2016年6月13日,上午12:24

    谢谢,伟大的教程..

  • 斯坦尼斯拉斯 2016年6月23日,上午10:47

    非常感谢您的教程。你应该得到我一个大大的拥抱。

  • 艾登 十二月13,2016,11:51下午

    ThnkS朋友…!

  • Xobi 2016年12月14日,上午1:58

    我是LINUX的新手,我对某些命令感到困惑,我正在编写那些路由命令:
    >> ip 路线添加 10.195.220.0/28 dev rmnet0
    >>从10.195.220.0/28表5添加IP规则
    ?? ip 路线添加 default via 10.195.220.1 dev rmnet0 table 5
    >> ip 路线添加 10.195.220.0/28 dev rmnet0 proto kernel scope link src 10.195.220.103 table 5.
    >> ip 路线添加 10.195.220.1 dev rmnet0 scope link table 5

    这些命令的目的是什么?我不清楚。
    如果有人解释,它将对我有很大帮助。
    谢谢

  • fb 2017年3月4日,晚上10:02

    在第3层(IP标头)中,目标IP将设置为“ 74.125.236.34”。
    ->仅在标题中?你能详细说明一下吗?

    在第2层中,将以默认网关(192.168.1.10的MAC地址)填充DESTINATION MAC地址。’s MAC ).
    这是在第2层框架中吗?

  • 迪帕克 2017年6月16日,上午6:29

    如果我想从互联网访问私有范围之一,反之亦然。然后是专用主机,网关和Internet上的主机上的配置。

发表评论