📄 0140networkcommand.htm
字号:
<span class=term_write>default server.cluster 0.0.0.0</span> UG 0 0 0 eth0
</pre></td></tr></table>
由上面的例子当中仔细观察 route 与 route -n 的输出结果,你可以发现有加 -n
参数的主要是显示出 IP ,至于使用 route 而已的话,显示的则是『主机名称』喔!
也就是说,在预设的情况下, route 会去找出该 IP 的主机名称,如果找不到呢?
就会显示的钝钝的(有点小慢),所以说,鸟哥通常都直接使用 route -n 啦!
由上面看起来,我们也知道 <span class=text_import2>default = 0.0.0.0/0.0.0.0</span> ,
而上面的资讯有哪些你必须要知道的呢?<br />
<ul>
<li><span class=text_import1>Destination, Genmask</span>∶这两个玩意儿就是分别是 network 与
netmask 啦!所以这两个咚咚就组合成为一个完整的网域棉!</li>
<li><span class=text_import1>Gateway</span>∶该网域是通过那个 gateway 连接出去的?
如果显示 0.0.0.0 表示该路由是直接由本机传送,亦即可以透过区域网路的 MAC 直接传讯;
如果有显示 IP 的话,表示该路由需要经过路由器 (通讯闸) 的帮忙才能够传送出去。</li>
<li><span class=text_import1>Flags</span>∶总共有多个旗标,代表的意义如下∶
<ul>
<li><span class=text_import2>U (route is up)∶该路由是启动的;</span>
<li>H (target is a host)∶目标是一部主机 (IP) 而非网域;
<li><span class=text_import2>G (use gateway)∶需要透过外部的主机 (gateway) 来转递封包;</span>
<li>R (reinstate route for dynamic routing)∶使用动态路由时,恢复路由资讯的旗标;
<li>D (dynamically installed by daemon or redirect)∶已经由服务或转 port 功能设定为动态路由
<li>M (modified from routing daemon or redirect)∶路由已经被修改了;
<li>! (reject route)∶这个路由将不会被接受(用来抵挡不安全的网域!)</ul></li>
<li><span class=text_import1>Iface</span>∶这个路由传递封包的介面。</li>
</ul>
此外,观察一下上面的路由排列顺序喔,<span class=text_import2>依序是由小网域
(192.168.10.0/24 是 Class C),逐渐到大网域
(169.254.0.0/16 Class B) 最后则是预设路由 (0.0.0.0/0.0.0.0)</span>。
然后当我们要判断某个网路封包应该如何传送的时候,该封包会经由这个路由的过程来判断喔!
举例来说,我上头仅有三个路由,若我有一个传往 192.168.10.20 的封包要传递,那首先会找 192.168.10.0/24
这个网域的路由,找到了!所以直接由 eth0 传送出去;<br /><br />
如果是传送到 Yahoo 的主机呢? Yahoo 的主机 IP 是 202.43.195.52,我通过判断 1)不是 192.168.10.0/24,
2)不是 169.254.0.0/16 结果到达 3)0/0 时,OK!传出去了,透过 eth0 将封包传给 192.168.10.30
那部 gateway 主机啊!所以说,路由是有顺序的。<br /><br />
因此当你重复设定多个同样的路由时,
例如在你的主机上的两张网路卡设定为相同网域的 IP 时,会出现什么情况?会出现如下的情况∶<br />
<table class="term"><tr><td class="term"><pre>
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 <span class=term_write>eth0</span>
192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 <span class=term_write>eth1</span>
</pre></td></tr></table>
也就是说,<span class=text_import2>由于路由是依照顺序来排列与传送的,
所以不论封包是由那个介面 (eth0, eth1) 所接收,都会由上述的 eth0 传送出去</span>,
所以,在一部主机上面设定两个相同网域的 IP 本身没有什么意义!有点多此一举就是了。
除非是类似虚拟主机 (Xen, VMware 等软体) 所架设的多主机时,才会有这个必要~<br />
<table class="term"><tr><td class="term"><pre>
<span class=term_hd>范例二∶路由的增加与删除</span>
[root@linux ~]# <span class=term_command>route del -net 169.254.0.0 netmask 255.255.0.0 dev eth0</span>
<span class=term_say># 上面这个动作可以删除掉 169.254.0.0/16 这个网域!
# 请注意,在删除的时候,需要将路由表上面出现的资讯都写入
# 包括 netmask , dev 等等参数喔!注意注意</span>
[root@linux ~]# <span class=term_command>route add -net 192.168.100.0 \</span>
> <span class=term_command>netmask 255.255.255.0 dev eth0</span>
<span class=term_say># 透过 route add 来增加一个路由!请注意,这个路由必须要能够与你互通。
# 举例来说,如果我下达底下的指令就会显示错误∶
# route add -net 192.168.200.0 netmask 255.255.255.0 gw 192.168.200.254
# 因为我的环境内仅有 192.168.10.100 这个 IP ,所以不能与 192.168.200.254
# 这个网段直接使用 MAC 互通!这样说,可以理解喔!?</span>
[root@linux ~]# <span class=term_command>route add default gw 192.168.10.30</span>
<span class=term_say># 增加预设路由的方法!请注意,只要有一个预设路由就够了喔!
# 在这个地方如果您随便设定后,记得使用底下的指令重新设定你的网路
# /etc/init.d/network restart</span>
</pre></td></tr></table>
如果是要进行路由的删除与增加,那就得要参考上面的例子了,
其实,使用 man route 里面的资料就很丰富了!仔细查阅一下棉!
你只要记得,当出现『<span class=text_import2>SIOCADDRT: Network is unreachable</span>』
这个错误时,肯定是由于 gw 后面接的 IP 无法直接与您的网域沟通 (Gateway 并不在你的网域内),
所以,赶紧检查一下是否输入错误啊!加油吧!<br /><br />
</div>
<hr /><a NAME="ip_cmd"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class="text_h2">ip</span><br />
<div class=block2>
ip 是个指令喔!并不是那个 TCP/IP 的 IP 啦!这个 ip 指令的功能可多了!
基本上,他就是整合了 ifconfig 与 route 这两个指令棉~不过, ip 可以达成的功能却又多更多!
真是个相当厉害的指令。如果您有兴趣的话,请自行 vi /sbin/ifup ,就知道整个 ifup
就是利用 ip 这个指令来达成的。好了,如何使用呢?让我们来瞧一瞧先!<br />
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>ip [option] [动作] [指令]</span>
<span class=term_say>参数∶
option ∶设定的参数,主要有∶
-s ∶显示出该装置的统计数据(statistics),例如总接受封包数等;
动作∶亦即是可以针对哪些网路参数进行动作,包括有∶
link ∶关于装置 (device) 的相关设定,包括 MTU, MAC 位址等等
addr/address ∶关于额外的 IP 协定,例如多 IP 的达成等等;
route ∶与路由有关的相关设定</span>
</pre></td></tr></table>
由上面的语法我们可以知道, ip 除了可以设定一些基本的网路参数之外,还能够进行额外的 IP 协定,
包括多 IP 的达成,真是太完美了!底下我们就分三个部分 (link, addr, route) 来介绍这个 ip
指令吧!<br /><br />
<hr><li><span class=text_import1>关于装置介面 (device) 的相关设定∶ ip link</span></li>
<div class=block2>
ip link 可以设定与装置 (device) 有关的相关设定,包括 MTU 以及该网路介面的 MAC 等等,
当然也可以启动 (up) 或关闭 (down) 某个网路介面啦!整个语法是这样的∶<br />
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>ip [-s] link show</span> <span class=term_say><== 单纯的查阅该装置相关的资讯</span>
[root@linux ~]# <span class=term_command>ip link set [device] [动作与参数]</span>
<span class=term_say>参数∶
show∶仅显示出这个装置的相关内容,如果加上 -s 会显示更多统计数据;
set ∶可以开始设定项目, device 指的是 eth0, eth1 等等介面代号;
动作与参数∶包括有底下的这些动作∶
up|down ∶启动 (up) 或关闭 (down) 某个介面,其他参数使用预设的乙太网路;
address ∶如果这个装置可以更改 MAC 的话,用这个参数修改!
name ∶给予这个装置一个特殊的名字;
mtu ∶就是最大传输单元啊!</span>
<span class=term_hd>范例一∶显示出所有的介面资讯</span>
[root@linux ~]# <span class=term_command>ip link show</span>
1: lo: <LOOPBACK,UP,10000> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,10000> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:50:fc:22:9a:cb brd ff:ff:ff:ff:ff:ff
3: sit0: <NOARP> mtu 1480 qdisc noop
link/sit 0.0.0.0 brd 0.0.0.0
[root@linux ~]# <span class=term_command>ip -s link show eth0</span>
2: eth0: <BROADCAST,MULTICAST,UP,10000> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:50:fc:22:9a:cb brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
484011792 2247372 0 0 0 0
TX: bytes packets errors dropped carrier collsns
2914104290 2867753 0 0 0 0
</pre></td></tr></table>
使用 ip link show 可以显示出整个装置介面的硬体相关资讯,如上所示,包括网卡位址(MAC)、MTU等等,
比较有趣的应该是那个 sit0 的介面了,那个 sit0 的介面是用在 IPv4 及 IPv6 的封包转换上的,
对于我们仅使用 IPv4 的网路是没有作用的。 lo 及 sit0 都是主机内部所自行设定的。
而如果加上 -s 的参数后,则这个网路卡的相关统计资讯就会被列出来,
包括接收 (RX) 及传送 (TX) 的封包数量等等,详细的内容与 ifconfig 所输出的结果相同的。<br />
<table class="term"><tr><td class="term"><pre>
<span class=term_hd>范例二∶启动、关闭与设定装置的相关资讯</span>
[root@linux ~]# <span class=term_command>ip link set eth0 up</span>
<span class=term_say># 启动 eth0 这个装置介面;</span>
[root@linux ~]# <span class=term_command>ip link set eth0 down</span>
<span class=term_say># 阿就关闭啊!简单的要命~</span>
[root@linux ~]# <span class=term_command>ip link set eth0 mtu 1000</span>
<span class=term_say># 更改 MTU 的值,达到 1000 bytes,单位就是 bytes 啊!</span>
</pre></td></tr></table>
更新网路卡的 MTU 使用 ifconfig 也可以达成啊!没啥了不起,不过,如果是要更改『网路卡代号、
MAC 位址的资讯』的话,那可就得使用 ip 棉~不过,设定前得要先关闭该网路卡,否则会不成功。
如下所示∶<br />
<table class="term"><tr><td class="term"><pre>
<span class=term_hd>范例三∶修改网路卡代号、MAC 等参数</span>
[root@linux ~]# <span class=term_command>ip link set eth0 name vbird</span>
SIOCSIFNAME: Device or resource busy
<span class=term_say># 因为该装置目前是启动的,所以不能这样做设定。你应该要这样做∶</span>
[root@linux ~]# <span class=term_command>ip link set eth0 down </span> <span class=term_say><==关闭介面</span>
[root@linux ~]# <span class=term_command>ip link set eth0 name vbird</span> <span class=term_say><==重新设定</span>
[root@linux ~]# <span class=term_command>ip link show </span> <span class=term_say><==观察一下</span>
2. <span class=term_write>vbird</span>: <BROADCAST,MILTICASE> mtu 900 qdisc pfifo_fast qlen 1000
link/ehter 00:40:d0:13:c3:46 brd ff:ff:ff:ff:ff:ff
<span class=term_say># 怕了吧!连网路卡代号都可以改变!不过,玩玩后记得改回来啊!
# 因为我们的 ifcfg-eth0 还是使用原本的装置代号!避免有问题,要改回来</span>
[root@linux ~]# <span class=term_command>ip link set vbird name eth0</span> <span class=term_say><==介面改回来</span>
[root@linux ~]# <span class=term_command>ip link set eth0 address aa:aa:aa:aa:aa:aa</span>
[root@linux ~]# <span class=term_command>ip link show eth0</span>
<span class=term_say># 如果你的网路卡支援硬体位址 (MAC) 可以更改的话,
# 那么上面这个动作就可以更改你的网路卡位址了!厉害吧!
# 不过,还是那句老话,测试完之后请立刻改回来啊!</span>
</pre></td></tr></table>
在这个装置的硬体相关资讯设定上面,包括 MTU, MAC 以及传输的模式等等,都可以在这里设定。
有趣的是那个 address 的项目,那个项目后面接的可是硬体位址 (MAC) 而不是 IP 喔!
很容易搞错啊!切记切记!更多的硬体参数可以使用 man ip 查阅一下与 ip link 有关的设定。<br /><br />
</div>
<hr><li><span class=text_import1>关于额外的 IP 相关设定∶ ip address</span></li>
<div class=block2>
如果说 ip link 是与 <a href="0110network_basic.php#whatisnetwork_osi">OSI 七层协定</a>
的第二层资料连阶层有关的话,那么 ip address (ip addr) 就是与第三层网路层有关的参数啦!
主要是在设定与 IP 有关的各项参数,包括 netmask, broadcast 等等。<br />
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>ip address show</span> <span class=term_say><==就是查阅 IP 参数啊!</span>
[root@linux ~]# <span class=term_command>ip address [add|del] [IP参数] [dev 装置名] [相关参数]</span>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -