ubuntu网络配置

10.1 IP 网络设置基础

一个 Debian 主机可能有很多有不同 Internet协议(IP)地址的网络接口。接口可能有很多种,如:

  • Loopback:lo

  • Ethernet:eth0、eth1 ……

  • Wi-Fi:wlan0、wlan1、wifi0 …… [50]

  • Token Ring:tr0、tr1 ……

  • PPP:ppp0、ppp1 ……

其他可用的网络设备还有很多,包括 SLIP、PLIP(串行和并行IP)、控制某种网络接口流量的“shaper”设备、帧中继、AX.25、X.25、ARCnet和 LocalTalk。

每个直接连接到 Internet(或任何基于 IP的网络)的网络接口都用唯一的 32 位的 IP 地址来识别。 [51] IP地址可分为网络地址和主机地址两个部分。如果你拿到一个IP 地址,把网络地址部分全部设为1,而主机地址部分全部设为0,则你将得到这个网络的子网掩码。

传统意义上,IP 网络按照网络地址的长度分为 8、16、24位三个组别。这个系统缺乏灵活性,浪费了很多 IP地址,所以现在的 IPv4网络是由可变长度的网络号来分配的。

               IP addresses                   net mask      length
     Class A   1.0.0.0     - 126.255.255.255  255.0.0.0     =  /8
     Class B   128.0.0.0   - 191.255.255.255  255.255.0.0   = /16
     Class C   192.0.0.0   - 223.255.255.255  255.255.255.0 = /24

IP 地址不在这个范围内的被用作特殊目的。

每一个组别中都有保留给本地网络(LANs)使用的地址范围。这些地址不会和Internet上的发生冲突。(同理,如果主机被分配到这类地址的话,这些主机就不能直接访问Internet,需要通过一个作为代理的网关或网络地址转换服务(NAT)才能访问Internet。)这些地址范围在下表中列出,包含每个组别中这些地址范围的数目。

               network addresses            length  how many
     Class A   10.x.x.x                     /8      1
     Class B   172.16.x.x -  172.31.x.x     /16     16
     Class C   192.168.0.x - 192.168.255.x  /24     256

IP 网络中 IP地址的第一个值就是网络本身,最后一个值是该网络的广播地址。[52] 其余所有的 IP地址都可以分配给网络中的主机。通常 IP地址的第一个和最后一个都会留给该网络的 Internet 网关。

路由表包含了关于内核如何把 IP包发送到它们目的地的信息。这儿有一个位于本地网络(LAN),IP地址为 192.168.50.x/24 的 Debian 主机的路由表。另一台主机192.168.50.1(也在 LAN 中)是公司网络 172.20.x.x/16 的路由器,主机192.168.50.254(也在 LAN 中)是负责访问 Internet 的路由器。

     # route
     Kernel IP routing table
     Destination   Gateway        Genmask       Flags Metric Ref Use Iface
     127.0.0.0     *              255.0.0.0     U     0      0     2 lo
     192.168.50.0  *              255.255.255.0 U     0      0   137 eth0
     172.20.0.0    192.168.50.1   255.255.0.0   UG    1      0     7 eth0
     default       192.168.50.254 0.0.0.0       UG    1      0    36 eth0
  • 第一行说明传送目的地是 127.x.x.x 的话,则会通过lo 回环网络接口来路由。

  • 第二行说明传送目的地是 LAN 的话,则会通过 eth0来路由。

  • 第三行说明传送目的地是公司网络的话,则会通过eth0 来路由,最后发送到网关192.168.50.1。

  • 第四行说明传送目的地是 Internet 的话,则会通过etho 来路由,最后发送到网关192.168.50.254。

路由表中的 IP 地址也可以用名称表示,这些名称从/etc/networks 或通过 resolver(C Library)来获得。

除了路由之外,内核能实现网络地址转换(NAT)、流量控制和包过滤。

参阅 Net-HOWTOothernetworking HOWTOs 来了解背后运行的原理。

10.2 底层网络设置

GNU/Linux 上传统的底层网络设置工具是 ifconfigroute,它们在 net-tools这个软件包中。目前这些工具被软将包 iproute 中的ip 代替。ip 可以在 Linux 2.2或更新的内核上运行,有着比老的工具更好的兼容性。然而,这些传统的设置工具还是能用的而且大家也更加熟悉。

10.2.1 底层网络设置 – ifconfigroute

下面演示如何把网络接口 eth0 的 IP 地址从192.168.0.3 改为 192.168.0.111;设置eth0 的路由,通过 192.168.0.1 访问10.0.0.0 这个网络。 执行 ifconfiroute时不带网络接口参数,则显示所有网络接口和路由的现状。

     # ifconfig
     eth0 Link encap:Ethernet  HWaddr 08:00:46:7A:02:B0
          inet addr:192.168.0.3  Bcast:192.168.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:23363 errors:0 dropped:0 overruns:0 frame:0
          TX packets:21798 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:13479541 (12.8 MiB)  TX bytes:20262643 (19.3 MiB)
          Interrupt:9
     
     lo   Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:230172 errors:0 dropped:0 overruns:0 frame:0
          TX packets:230172 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:22685256 (21.6 MiB)  TX bytes:22685256 (21.6 MiB)
     # route
     Kernel IP routing table
     Destination  Gateway      Genmask          Flags Metric Ref Use Iface
     192.168.0.0  *            255.255.0.0      U     0      0     0 eth0
     default      192.168.0.1  255.255.255.255  UG    0      0     0 eth0

首先我们关闭网络接口。

     # ifconfig eth0 inet down
     # ifconfig
     lo   Link encap:Local Loopback
       ... (没有 eth0 这个条目了)
     # route
       ... (没有路由表了)

接下来我们启动 eth0 并给予其新的 IP 地址和路由。

     # ifconfig eth0 inet up 192.168.0.111 \
                netmask 255.255.255.0 broadcast 192.168.0.255
     # route add -net 10.0.0.0 netmask 255.0.0.0 gw 192.168.0.1 dev eth0

结果是:

     # ifconfig
     eth0 Link encap:Ethernet  HWaddr 08:00:46:7A:02:B0
          inet addr:192.168.0.111  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          ...
     
     lo   Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          ...
     # route
     Kernel IP routing table
     Destination  Gateway      Genmask        Flags Metric Ref Use Iface
     192.168.0.0  *            255.255.255.0  U     0      0     0 eth0
     10.0.0.0     192.168.0.1  255.0.0.0      UG    0      0     0 eth0

更多信息请参阅 ifconfig(8)route(8).

10.2.2 底层网络设置 – ip

ip 和先前的 ifconfigroute有相同功能的命令如下:

  • ip link show

  • ip route list

  • ip link set eth0 down

  • ip addr del dev eth0 local 192.168.0.3

  • ip addr add dev eth0 local 192.168.0.111/24 broadcast192.168.0.255

  • ip link set eth0 up

  • ip route add dev eth0 to 10.0.0.0/8 src 192.168.0.111 via192.168.0.1

运行的时候使用 help 参数,能让 ip打印出命令的语法。 例如,ip link help 打印出:

     Usage: ip link set DEVICE { up | down | arp { on | off } |
                          dynamic { on | off } |
                          multicast { on | off } | txqueuelen PACKETS |
                          name NEWNAME |
                          address LLADDR | broadcast LLADDR |
                          mtu MTU }
            ip link show [ DEVICE ]

参阅 ip(8).

10.2.3 设置无线网卡(Wi-Fi)接口

对于无线网卡(Wi-Fi)接口,除了 ifconfigip 之外,你还需要 iwconfig这个程序。此程序在 wireless-tools 中。

参阅 iwconfig(8).


10.4.1 域名解析器

域名解析器的工作是查找某个域名所对应的 IP地址。大部分常用的域名解析器是 GNU C Library 中的 resovler提供的功能(resolver(3))。另一个是由libfiredns 软件包提供的 FireDNSresolver。还有其他的。

GNU LIBC 的域名解析器对域名的解析是由/etc/nsswitch.conf 中的 hosts这一行配置决定的。该行列出了解析域名用的服务:例如dns、files、nis、nisplus。参阅nsswitch.conf(5)。 即使在使用 files的情况下,域名解析器的行为也是由 /etc/hosts这个配置文件控制的。参阅 hosts(5)

上述文件都是静态的,你可以用你喜欢的编辑器修改。

在使用 dns服务的情况下,域名解释器的行为也是由/etc/resolv.conf 这个配置文件控制的。参阅resolv.conf(5)resolv.conf的一个重要功能就是提供一个域名服务器的 IP地址列表,通过查询这些服务器来获得域名解析。这一列表常常依赖于网络环境,而且在你机器运行的时候,网络环境时常发生变化。pppddhclient 这类程序都能添加或删除resolv.conf中的信息。但是这些功能不是每次都能正常工作而且两者还会有冲突。软件包resolvconf采用了更好的方法解决了这个问题,并提供了一个标准的框架来更新resolv.conf。参阅管理域名服务器信息 –resolvconf, 第 10.4.2 节。

10.4.2 管理域名服务器信息 – resolvconf

软件包 resolvconf提供了一个框架,能动态的管理关于可用域名服务器的信息。它解决了长久以来如何维护一个给域名解析器和DNS 缓存使用的动态的域名服务器列表的问题。Resolvconf把它自己设为控制网络接口和提供域名服务信息的程序与需要域名服务信息的应用程序的中间媒介。

resolvconf被设计成不需要任何手动设置就能工作。但是,这个软件包还是很新的,可能需要一些手工的干预才能正常的工作。如果你曾经定制过软件包,而且它们更新了/etc/resolv.conf的话:你就需要去掉这部分定制。更多信息参阅 file:///usr/share/doc/resolvconf/README.gz

10.4.3 缓存查询过的域名 – nscddnsmasqpdnsdbind9

如果你的域名服务器响应速度非常慢,你可能需要使用nscd 来缓存域名解析器 libc6查询到的结果。

如果你希望为你本地网络中的其他主机缓存结果的话,你可能要去运行一个缓存转发域名服务器(cachingforwarding nameserver)。就像 dnsmasqpdnsd

如果你愿意,你也可以用软件包 bind9 中的named 来做缓存转发域名服务器(caching forwardingnameserver)。但是这是一个很庞大的程序,除非你需要它高级功能,否则还是使用上面提到的那些程序比较好。

所有这些软件包都能和 resolvconf 一起工作。

10.4.4 提供域名解析服务 – bind

如果你希望给一个域提供一个权威的域名服务的话,你就需要一个完善的域名服务器,例如软件包bind9 中的 named

如果你安装了 bind9,你也应该安装dnsutils。 你可能还需要安装这样一些工具软件包:bind9-hostdns-browsednscvsutilnslint。你可能还需要安装说明文档: bind9-doc。你可能还需要安装开发文档: libbind-devlibnet-dns-perl

安装 bind9 或者用 dpkg-reconfigurebind9 来进行基本的设置。设置包括编辑文件name。在 Debian 中,你可以在 /etc/bind/找到这个文件,它主要是用来设置基本的 DNS域的;它包含了其他两个文件:named.conf.local,用来定义本地区域,和named.conf.options,用来设置选项的。(后者的执行需要resolvconf 来产生 /var/run/bind/named.options文件,除了 forwarders的说明是一个当前可用的非本地域名服务器列表之外,其余都和原先的一样。要利用这个,可以修改named.conf 中的 include 这一样,使其包含/var/run/bind/named.options。参阅管理域名服务器信息 –resolvconf, 第 10.4.2 节。)

named.conf*文件中用到的数据库文件,如果没有指定完整的路径,则该数据库文件会被存储在/var/cache/bind/。这是一个正确的存储 named产生的文件的地方。例如:某个域的从服务器使用的数据库文件。/etc/bind/下面的那些静态的数据库文件,需要在 named.conf中有完整的路径才能被找到。详情参阅 file:///usr/share/doc/bind9/README.Debian.gz

10.5 使用 DHCP 来配置网络接口

底层的网络接口设置可以用 Dynamic Host Configuration Protocol (DHCP)来自动设置。你的防火墙或路由器或宽带 ISP可能用这个方法来配置 IP 地址和其他参数。

要做这个工作你必须安装下列软件包的其中一个:

  • dhcp3-client (version 3, Internet Software Consortium)

  • dhcpcd (Yoichi Hariguchi and Sergei Viznyuk)

  • pump (Red Hat)

pump 简易且被广泛应用。 dhcp3-client复杂,但是可配置程度更高。 [54]

10.6 Debian 的高级网络设置

10.6.1 使用 ifupdown 进行高级网络设置

为了让网络设置更加简单,Debian提供了一个标准的高级网络设置工具,包含 ifupifdown 程序和 /etc/network/interfaces 文件。[55] 如果你选择用ifupdown来配置你的网络,那么就不要同时使用底层工具去配置。这也意味着你不应该用其他高级配置工具,如whereamidivineintuitively等。他们调用的也是底层配置工具。ifupdown程序在设计的时候,是假设仅有这样一个程序会被用来设置网络接口的。

更新接口设置是执行:

     # ifdown eth0
     # editor /etc/network/interfaces  # 做你需要的调整
     # ifup eth0

更多信息参阅 interfaces(5)file:///usr/share/doc/ifupdown/examples/network-interfaces.gzifup(8)

10.6.1.1 用固定 IP 地址为接口进行设置

假设你要配置一个以太网接口,使其拥有一个固定的 IP 地址192.168.0.111。这个 IP 地址以 192.168.0为开头,所以它肯定在一个 LAN 内。进一步假设192.168.0.1 是 LAN 上面 Internet 网关的地址。编辑/etc/network/interfaces,使其包含类似下面这段的内容:

     iface eth0 inet static
             address 192.168.0.111
             netmask 255.255.255.0
             gateway 192.168.0.1

在接口被激活或是在激活之前,你都可以配置接口的其他部分或者进行其他操作。只要你在"up"和"down"那几行中设置合适的命令。

     iface eth0 inet static
             address 192.168.0.111
             netmask 255.255.255.0
             gateway 192.168.0.1
             up route add -net 10.0.0.0 netmask 255.0.0.0 gw 192.168.0.2 dev $IFACE
             down route del -net 10.0.0.0 netmask 255.0.0.0 gw 192.168.0.2 dev $IFACE
             up echo Interface $IFACE going up | /usr/bin/logger -t ifup
             down echo Interface $IFACE Going down | /usr/bin/logger -t ifdown

你也可以选择把命令插入到 /etc/network/if-up.d/etc/network/if-down.d目录下的脚本中。这些脚本也能执行扩展的选项。详情参阅interfaces(5)。例如,软件包 resolvconf包含的脚本允许你在接口被激活的同时,往/etc/resolv.conf 添加指定的 DNS 信息:

     iface eth0 inet static
             address 192.168.0.111
             netmask 255.255.255.0
             gateway 192.168.0.1
             dns-search somedomain.org
             dns-nameservers 195.238.2.21 195.238.2.22

dns-search 选项的参数 somedomain.org 符合resolv.conf(5) 中所说的 search 选项的参数。dns-nameservers 选项的参数 195.238.2.21 和195.238.2.22 符合选项 nameserver的参数。其他可以识别的选项是 dns-domain 和dns-sortlist。参阅管理域名服务器信息 –resolvconf, 第 10.4.2 节。

10.6.1.2 用 DHCP 配置接口

为了使用 DHCP 配置接口,请编辑/etc/network/interfaces,使其包含一下这段内容:

     iface eth0 inet dhcp

为了让 DHCP 能工作,你需要安装一个使用DHCP 来配置网络接口, 第 10.5 节中提及的 DHCP客户端程序。

10.6.1.3 配置无线网卡(Wi-Fi)接口

软件包 wireless-tools 包含了一个钩子脚本/etc/network/if-pre-up.d/wireless-tools,使得在接口被激活之前,对无线网卡(802.11a/b/g)进行设置变为可能。使用iwconfig 程序来完成设置,参阅iwconfig(8)。任何一个 iwconfig的有效参数,你都可以把它包含在/etc/network/interfaces中,并在原有的参数名字前加上“wireless-”这个前缀。例如,要设置eth0, 使得 eth0 在被 DHCP 激活之前, ESSID设定为 myessid,encryption key 设定为123456789e,请编辑/etc/network/interfaces,加入一下这段内容:

     iface eth0 inet dhcp
             wireless-essid myessid
             wireless-key 123456789e

注意!如果你使用 waproamd来设置这个接口的话,你不应该使用这个方法来设置 ESSID 和key。在 ifup 执行时,waproamd就已经设置好了 ESSID 和 key。参阅使用 waproamd 启动网络设置, 第10.8.4 节。

10.11 网络故障排除

如果你遇到了问题,首先执行下列命令来检查输出的结果:

     # ifconfig
     # cat /proc/pci
     # cat /proc/interrupts
     # dmesg | more



你可能感兴趣的:(ubuntu网络配置)