program-dog

2016年12月1日星期四

[Linux Net]:2 如何配置Linux网卡

这一章介绍Linux下如何配置网卡上网。涉及的命令有:ifup/ifdown,ifconfig,dhclient,hostname,apr,route,ping,ethtool

Network looks like Summer

Network looks like Summer



版权声明

Copyright 2016-2016 Program Dog

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled 'GNU Free Documentation License'.


2.1 有或没有界面

近年来的linux发行版一般都提供了图形界面的网络配置工具。一些人抱怨同时混用界面和命令行进行网卡配置会导致混乱。但是,一些界面应用,尤其是Network Manager(或称Wicd)**和yast 可以做到同时兼容界面配置和命令行配置。

由于本教程的目标读者是运维,因此本书的很多Linux命令行需要管理员权限。

本章仅讨论命令行下的网卡配置。

不幸的是Linux下没有统一的命令,也没有完全相同的/etc配置。因此我们仅仅讨论两个比较大的发行版。

我们先讨论Debian系列(或Ubuntu或Mint),再讨论RHEL(或Centos或Fedora)系列。

2.2. Debian网卡配置

2.2.1. /etc/network/interfaces

文件/etc/network/interfaces是debian上网卡的核心配置文件。

dhcp 客户端

下面是我电脑上的dhcp和eth0(第一块网卡)的配置。

paul@debian8:~$ cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

客户端最好采用dhcp方式分配ip,但是服务端一般需要固定ip。

固定 ip

下面是/etc/network/interfaces 的固定ip配置。

root@debian7~# cat /etc/network/interfaces
auto lo
iface lo inet loopback

auto  eth0
iface eth0 inet static
address   10.42.189.198
broadcast 10.42.189.207
netmask   255.255.255.240
gateway   10.42.189.193

上面的配置表明你不仅仅可以对该配置文件配置ip。还可以配置网关,子网掩码等,详情参见interfaces(5)

2.2.2. /sbin/ifdown

强烈建议在配置网卡之前先关闭网口,可以用ifdown命令关闭网口。

用该命令关闭一个配有固定ip的网口时,如果没有报错则无消息提示。但是ifconfig会发现该网口已经消失。

root@ubu1104srv:~# ifdown eth0
root@ubu1104srv:~# ifconfig
lo   Link encap:Local Loopback 
     inet addr:127.0.0.1  Mask:255.0.0.0
     inet6 addr: ::1/128 Scope:Host
     UP LOOPBACK RUNNING  MTU:16436  Metric:1
     RX packets:106 errors:0 dropped:0 overruns:0 frame:0
     TX packets:106 errors:0 dropped:0 overruns:0 carrier:0
     collisions:0 txqueuelen:0 
     RX bytes:11162 (11.1 KB)  TX bytes:11162 (11.1 KB)

关闭的网口就不能联网了。

2.2.3. /sbin/ifup

下面是通过ifup开启eth0,展示dhcp的示例。

root@ubu1010srv:/etc/network# ifup eth0
Internet Systems Consortium DHCP Client V3.1.3
Copyright 2004-2009 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Listening on LPF/eth0/08:00:27:cd:7f:fc
Sending on
LPF/eth0/08:00:27:cd:7f:fc
Sending on
Socket/fallback
DHCPREQUEST of 192.168.1.34 on eth0 to 255.255.255.255 port 67
DHCPNAK from 192.168.33.100
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 3
DHCPOFFER of 192.168.33.77 from 192.168.33.100
DHCPREQUEST of 192.168.33.77 on eth0 to 255.255.255.255 port 67
DHCPACK of 192.168.33.77 from 192.168.33.100
bound to 192.168.33.77 -- renewal in 95 seconds.
ssh stop/waiting
ssh start/running, process 1301
root@ubu1010srv:/etc/network#
注:貌似例子有点陈旧。 #todo 更新ifdown 和 ifup示例。

关于dhcp,本书在接下来不同章节都会讲到。

2.3. RHEL 网卡配置

## todo 装台RHEL的机器再翻译

2.4. ifconfig

/sbin/ifconfig命令不带参数将会列出当前活跃的网口,包含wire和lo网口。下面是不带ip的eth0

root@ubu1010:~# ifconfig 
eth0 Link encap:Ethernet  HWaddr 00:26:bb:5d:2e:52 
     UP BROADCAST MULTICAST  MTU:1500  Metric:1
     RX packets:0 errors:0 dropped:0 overruns:0 frame:0
     TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
     collisions:0 txqueuelen:1000 
     RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
     Interrupt:43 Base address:0xe000 

eth1 Link encap:Ethernet  HWaddr 00:26:bb:12:7a:5e 
     inet addr:192.168.1.30  Bcast:192.168.1.255  Mask:255.255.255.0
     inet6 addr: fe80::226:bbff:fe12:7a5e/64 Scope:Link
     UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
     RX packets:11141791 errors:202 dropped:0 overruns:0 frame:11580126
     TX packets:6473056 errors:3860 dropped:0 overruns:0 carrier:0
     collisions:0 txqueuelen:1000 
     RX bytes:3476531617 (3.4 GB)  TX bytes:2114919475 (2.1 GB)
     Interrupt:23 

lo   Link encap:Local Loopback 
     inet addr:127.0.0.1  Mask:255.0.0.0
     inet6 addr: ::1/128 Scope:Host
     UP LOOPBACK RUNNING  MTU:16436  Metric:1
     RX packets:2879 errors:0 dropped:0 overruns:0 frame:0
     TX packets:2879 errors:0 dropped:0 overruns:0 carrier:0
     collisions:0 txqueuelen:0 
     RX bytes:486510 (486.5 KB)  TX bytes:486510 (486.5 KB)

ifconfig查看特定网口信息。

[root@rhel6 ~]# ifconfig eth0
eth0 Link encap:Ethernet  HWaddr 08:00:27:DD:0D:5C  
     inet addr:192.168.1.99  Bcast:192.168.1.255  Mask:255.255.255.0
     inet6 addr: fe80::a00:27ff:fedd:d5c/64 Scope:Link
     UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
     RX packets:2969 errors:0 dropped:0 overruns:0 frame:0
     TX packets:1918 errors:0 dropped:0 overruns:0 carrier:0
     collisions:0 txqueuelen:1000 
     RX bytes:335942 (328.0 KiB)  TX bytes:190157 (185.7 KiB)

普通用户调用/sbin下的命令的时候,得用全路径,下面是debian下的调用结果。

paul@debian5:~$ /sbin/ifconfig eth3
eth3 Link encap:Ethernet  HWaddr 08:00:27:ab:67:30 
     inet addr:192.168.1.29  Bcast:192.168.1.255  Mask:255.255.255.0
     inet6 addr: fe80::a00:27ff:feab:6730/64 Scope:Link
     UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
     RX packets:27155 errors:0 dropped:0 overruns:0 frame:0
     TX packets:30527 errors:0 dropped:0 overruns:0 carrier:0
     collisions:0 txqueuelen:1000 
     RX bytes:13095386 (12.4 MiB)  TX bytes:25767221 (24.5 MiB)
注:译者亲试普通用户调用ifconfig命令不需要全路径。测试系统是Ubuntu 16.04。

2.4.1. 通过ifconfig开启和关闭网口

也可以通过ifconfig开关网口,和ifconfig eth0 up 和 ifup eth0不同之处在于ifconfig会读取内存中的网卡配置重新激活网卡,而ifup却重新读取配置文件,然后开启网卡。

[root@rhel6 ~]# ifconfig eth0 down
[root@rhel6 ~]# ifconfig eth0 up
[root@rhel6 ~]# ifconfig eth0
eth0 Link encap:Ethernet  HWaddr 08:00:27:DD:0D:5C
     inet addr:192.168.1.99  Bcast:192.168.1.255  Mask:255.255.255.0
     inet6 addr: fe80::a00:27ff:fedd:d5c/64 Scope:Link
     UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
     RX packets:2995 errors:0 dropped:0 overruns:0 frame:0
     TX packets:1927 errors:0 dropped:0 overruns:0 carrier:0
     collisions:0 txqueuelen:1000 
     RX bytes:339030 (331.0 KiB)  TX bytes:191583 (187.0 KiB)

2.4.2. 通过ifconfig更改ip地址

临时更改ip地址,本ip地址在重启网卡或重启系统之前有效。

[root@rhel6 ~]# ifconfig eth0 | grep 192
     inet addr:192.168.1.99  Bcast:192.168.1.255  Mask:255.255.255.0
[root@rhel6 ~]# ifconfig eth0 192.168.33.42 netmask 255.255.0.0
[root@rhel6 ~]# ifconfig eth0 | grep 192
     inet addr:192.168.33.42  Bcast:192.168.255.255  Mask:255.255.0.0
[root@rhel6 ~]# ifdown eth0 && ifup eth0
[root@rhel6 ~]# ifconfig eth0 | grep 192
     inet addr:192.168.1.99  Bcast:192.168.1.255  Mask:255.255.255.0

2.4.3. 通过ifconfig设置mac地址

你可以通过ifconfig临时更改的mac地址(注:只是临时改变软件中的mac地址,硬件mac地址没有被改变)。

[root@rhel6 ~]# ifconfig eth0 | grep HWaddr
eth0 Link encap:Ethernet  HWaddr 08:00:27:DD:0D:5C 
[root@rhel6 ~]# ifconfig eth0 hw ether 00:42:42:42:42:42
[root@rhel6 ~]# ifconfig eth0 | grep HWaddr
eth0 Link encap:Ethernet  HWaddr 00:42:42:42:42:42

2.5. ip命令

有的系统上没有ifconfig命令,ip命令可以取而代之。

RHEL 7上查看ip地址,如下命令。

[root@rhel71 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:89:22:33 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.135/24 brd 192.168.1.255 scope global dynamic enp0s3
       valid_lft 6173sec preferred_lft 6173sec
    inet6 fe80::a00:27ff:fe89:2233/64 scope link
       valid_lft forever preferred_lft forever
[root@rhel71 ~]#
注:在Debian上同样适用。

2.6. dhclient命令

一般桌面Linux系统都提供dhclient命令。这个命令可以从dhcp服务端自动获取网口配置。如果你的网口配置了dhcp或者bootp,当你执行/sbin/ifup命令的时候,dhclient会自动启动。

2.7. hostname

每个主机都有一个hostname,通常用于DNS解析。

下面是Red Hat/Fedora上的hostname配置。

[root@rhel6 ~]# grep HOSTNAME /etc/sysconfig/network
HOSTNAME=rhel6
[root@rhel6 ~]# hostname
rhel6

RHEL7/CentOS7的hostname的标准配置文件是/etc/hostname

[root@rhel71 ~]# cat /etc/hostname
rhel71.linux-training.be
[root@rhel71 ~]#

Ubuntu/Debian上用/etc/hostname配置主机名。

paul@debian8:~$ cat /etc/hostname
server42
paul@debian8:~$ hostname
server42

任何主机你都可以通过命令hostname临时更改主机名。

[root@rhel6 ~]# hostname server42
[root@rhel6 ~]# hostname
server42
``

任何Linux都可以通过**sysctl**查看和设置主机名。

``bash
[root@rhel6 ~]# sysctl kernel.hostname
kernel.hostname = server42
[root@rhel6 ~]# sysctl kernel.hostname=rhel6
kernel.hostname = rhel6
[root@rhel6 ~]# sysctl kernel.hostname
kernel.hostname = rhel6
[root@rhel6 ~]# hostname
rhel6

2.8. arp

ip到mac的过程由网络模型第二层broadcast的arp协议完成。用arp 工具 查看 arp 表,命令如下。

root@barry:~# arp -a
? (192.168.1.191) at 00:0C:29:3B:15:80 [ether] on eth1
agapi (192.168.1.73) at 00:03:BA:09:7F:D2 [ether] on eth1
anya (192.168.1.1) at 00:12:01:E2:87:FB [ether] on eth1
faith (192.168.1.41) at 00:0E:7F:41:0D:EB [ether] on eth1
kiss (192.168.1.49) at 00:D0:E0:91:79:95 [ether] on eth1
laika (192.168.1.40) at 00:90:F5:4E:AE:17 [ether] on eth1
pasha (192.168.1.71) at 00:03:BA:02:C3:82 [ether] on eth1
shaka (192.168.1.72) at 00:03:BA:09:7C:F9 [ether] on eth1
root@barry:~#
Anya 是 Cisco 防火墙, 
faith 是 laser 打印机, 
kiss 是 Kiss DP600, 
laika 是 laptop 
Agapi, Shaka and Pasha 是 SPARC 服务. 
带问号的是 虚拟机中的Red Hat Enterprise Linux 

arp -d删除一条arp。

[root@rhel6 ~]# arp
Address             HWtype  HWaddress           Flags Mask       Iface
ubu1010             ether   00:26:bb:12:7a:5e   C                eth0
anya                ether   00:02:cf:aa:68:f0   C                eth0
[root@rhel6 ~]# arp -d anya
[root@rhel6 ~]# arp
Address             HWtype  HWaddress           Flags Mask       Iface
ubu1010             ether   00:26:bb:12:7a:5e   C                eth0
anya                        (incomplete)                         eth0
[root@rhel6 ~]# ping anya
PING anya (192.168.1.1) 56(84) bytes of data.
64 bytes from anya (192.168.1.1): icmp_seq=1 ttl=254 time=10.2 ms
...
[root@rhel6 ~]# arp
Address             HWtype  HWaddress           Flags Mask       Iface
ubu1010             ether   00:26:bb:12:7a:5e   C                eth0
anya                ether   00:02:cf:aa:68:f0   C                eth0

2.9. route 命令

通过/sbin/route查看本地路由表(netstat -r也可以)。

root@RHEL4b ~]# netstat -r
Kernel IP routing table
Destination     Gateway   Genmask         Flags   MSS Window  irtt Iface
192.168.1.0     *         255.255.255.0   U         0 0          0 eth0
[root@RHEL4b ~]# 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
[root@RHEL4b ~]#

上面现实本计算机没有配置gateway,通过route add default gw添加默认 gateway到最低端。

除非配置/etc下面的文件,否则本gateway会在重启之后失效。

2.10. ping

ping另一台主机,能ping通就说明网路是通的。

[root@RHEL4b ~]# ping 192.168.1.5
PING 192.168.1.5 (192.168.1.5) 56(84) bytes of data.
64 bytes from 192.168.1.5: icmp_seq=0 ttl=64 time=1004 ms
64 bytes from 192.168.1.5: icmp_seq=1 ttl=64 time=1.19 ms
64 bytes from 192.168.1.5: icmp_seq=2 ttl=64 time=0.494 ms
64 bytes from 192.168.1.5: icmp_seq=3 ttl=64 time=0.419 ms

--- 192.168.1.5 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3009ms
rtt min/avg/max/mdev = 0.419/251.574/1004.186/434.520 ms, pipe 2
[root@RHEL4b ~]#

2.11. ethtool(可选读)

要查看或配置网卡,可用etholl。查看结果依网传输口性能而定。下面是一个自协商带宽示例。

root@laika:~# ethtool eth0
Settings for eth0:
    Supported ports: [ TP ]
    Supported link modes:   10baseT/Half 10baseT/Full 
                            100baseT/Half 100baseT/Full 
                            1000baseT/Full 
    Supports auto-negotiation: Yes
    Advertised link modes:  10baseT/Half 10baseT/Full 
                            100baseT/Half 100baseT/Full 
                            1000baseT/Full 
    Advertised auto-negotiation: Yes
    Speed: 1000Mb/s
    Duplex: Full
    Port: Twisted Pair
    PHYAD: 0
    Transceiver: internal
    Auto-negotiation: on
    Supports Wake-on: pumbg
    Wake-on: g
    Current message level: 0x00000033 (51)
    Link detected: yes

下面这个例子表面如何用ethtool在带宽1000Mbit和100Mbit中来回切换。注意有的时候带宽可能会自己漲回1000Mbit。

root@laika:~# ethtool eth0 | grep Speed
    Speed: 1000Mb/s
root@laika:~# ethtool -s eth0 speed 100
root@laika:~# ethtool eth0 | grep Speed
    Speed: 100Mb/s
root@laika:~# ethtool -s eth0 speed 1000
root@laika:~# ethtool eth0 | grep Speed
    Speed: 1000Mb/s

2.12. 练习:网卡配置

1.查看dhclient是否在运行。

2.查看当前ip。

3.查看ip的配置文件。

4.根据本书网卡配置,更改dhcp,配置固定ip。注意ip不要配置冲突。

5.上一题中,你是否配置gateway,如果没有,请配置。

6.检查你的gateway。

7.检查是否可以连通网关。

8.更改mac地址的最后一个数字。

9.http,pop3,ssh,telnet,nntp,ftp 这些协议用到哪些端口?

10.解释为什么email和web用tcp而不用udp?

11.查看hostname。

12.现在你的电脑正在和哪些ip建立连接?


注:

1.本文由Program Dog翻译自 http://linux-training.be

2.本文原始链接:https://program-dog.blogspot.com/2016/12/linux-net-char02-interface-configuration.html


2 条评论 :

  1. 好详细啊!博主辛苦啦!

    回复删除
  2. 学习之余整理顺便做的翻译,希望对你有所帮助:)

    回复删除