这一章介绍Linux下如何配置网卡上网。涉及的命令有:ifup/ifdown,ifconfig,dhclient,hostname,apr,route,ping,ethtool
版权声明
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
好详细啊!博主辛苦啦!
回复删除学习之余整理顺便做的翻译,希望对你有所帮助:)
回复删除