Gentoo Logo

[ << ] [ < ] [ 主页 ] [ > ] [ >> ]


3. 模块化网络

内容:

3.a. 网络模块

我们现在支持模块化的网络脚本,这意味着我们可以很方便地增添新的网络接口和配置模块,同时和原来已存在的模块或是接口保持良好的兼容性。

只要模块需要的软件包已安装,它就会被默认载入。如果你指定一个模块而它需要的软件包未被安装,则你就会收到一个错误信息通知你需要安装哪一个软件包。一般来说,只有当你安装了提供相同服务的两个及以上的软件包时,你才需要使用模块设定来选择你想使用其中的哪一个。

注意: 除非有特别说明,这里所讨论的全部设定都保存在/etc/conf.d/net中。

代码 1.1: 模块选择

# 选择iproute2而不用ifconfig
modules=( "iproute2" )

# 你也可以为一个网络接口指定其他的模块
# 这个例子中我们希望使用pump来代替dhcpcd
modules_eth0=( "pump" )

# 你也可以指定不使用哪一个模块——例如你一方面想使用supplicant或是
# linux-wlan-ng来控制无线网络配置,一方面又想配置每一个ESSID相关联的网络设定。
modules=( "!iwconfig" )

3.b. 网络接口处理程序

目前我们提供了两个网络接口处理程序:ifconfigiproute2。你可以使用i这两个程序中的一个进行任意种类的网络配置。

ifconfig是目前Gentoo默认使用的网络接口处理程序,而且它也包含在系统的profile之中。iproute2是另一个灵活且强大的软件包,但是默认的系统配置中并不包含它。

代码 2.1: 安装iproute2

# emerge sys-apps/iproute2

# 在iproute2和ifconfig都已安装的情况下,选用iproute2
modules=( "iproute2" )

由于ifconfigiproute2的功能很类似,我们允许使用它们的基本配置功能以使二者可以通用。例如说下面的代码片段对于它们之中的任何一个来说都是起效的。

代码 2.2: ifconfig和iproute2示例

config_eth0=( "192.168.0.2/24" )
config_eth0=( "192.168.0.2 netmask 255.255.255.0" )

# 我们也可以指定广播地址
config_eth0=( "192.168.0.2/24 brd 192.168.0.255" )
config_eth0=( "192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255" )

3.c. DHCP

DHCP是一种通过DHCP服务器来获得相关的网络信息(比如IP地址、DNS服务器、网关等)的方式。这意味着如果在网络上存在着一个DHCP服务器的话,你只要让每一个客户端使用DHCP,这些客户端就会自动地配置好相关的网络设置。当然,如果在使用DHCP之前还需要配置无线网络或是PPP等其他设定的话,你就必须先配置好这些才行。

dhclientdhcpcd或者pump都可以提供DHCP功能。每一种DHCP模块都有各自的优缺点——下面是一个快速的检阅。

DHCP模块 软件包 优点 缺点
dhclient net-misc/dhcp 由ISC(也是BIND DNS软件的开发人员)制作;高度可配置性。 配置起来过于复杂;软件十分臃肿;无法通过DHCP获得NTP服务器;默认不发送主机名。
dhcpcd net-misc/dhcpcd Gentoo一直以来的预设软件;不依赖其他外部软件;由Gentoo开发的。 有时很慢;当租约为无穷大时不会变成守护进程。
pump net-misc/pump 轻量级的;不依赖其他外部软件 不再被上游维护,不可靠,尤其在使用modem的时候;不能通过DHCP获得NIS服务器。

当你在系统上安装有不止一种DHCP客户端,你需要指定使用哪一个——否则如果系统装有dhcpcd,我们将默认使用它。

你可以使用module_eth0="..."(把module改成你所使用DHCP模块的名称——例如:dhcpcd_eth0为DHCP模块指定选项。

我们尝试使DHCP的配置更加灵活——所以我们通过dhcp_eth0变量来支持下面这些命令,默认不使用它们中的任何一个:

  • release - 释放IP地址以便它可以被重新使用
  • nodns - 不覆盖/etc/resolv.conf
  • nontp - 不覆盖/etc/ntp.conf
  • nonis - 不覆盖/etc/yp.conf

代码 3.1: 在/etc/conf.d/net中的DHCP配置范例

# 只在你安装了一个以上的DHCP模块后才需要
modules=( "dhcpcd" ) 

config_eth0=( "dhcp" )
dhcpcd_eth0="-t 10" # 10秒后超时
dhcp_eth0="release nodns nontp nonis" # 只获取IP地址

注意: 由于dhcpcdpump默认会把主机名发送给DHCP服务器,所以你就可以不用去指定它了。

3.d. 基于PPPoE/PPPoA的ADSL

首先我们安装ADSL软件。

代码 4.1: 安装ppp软件包

# emerge net-dialup/ppp

注意: 如果你需要PPPoA,确保你使用的是>=baselayout-1.12.x

其次,创建PPP网络脚本和PPP所使用的以太网卡的网络脚本:

代码 4.2: 创建PPP和以太网卡网络脚本

# ln -s /etc/init.d/net.lo /etc/init.d/net.ppp0
# ln -s /etc/init.d/net.lo /etc/init.d/net.eth0

确保在/etc/conf.d/rc设定RC_NET_STRICT_CHECKING="yes"。

现在我们需要配置/etc/conf.d/net

代码 4.3: 一个基本的PPPoE设定

config_eth0=( null ) (指定你的以太网卡)
config_ppp0=( "ppp" )
link_ppp0="eth0" (指定你的以太网卡)
plugins_ppp0=( "pppoe" )
username_ppp0='user'
password_ppp0='password'
pppd_ppp0=(
       "noauth"
       "defaultroute"
       "usepeerdns"
       "holdoff 3"
       "child-timeout 60"
       "lcp-echo-interval 15"
       "lcp-echo-failure 3"
       noaccomp noccp nobsdcomp nodeflate nopcomp novj novjccomp
)

depend_ppp0() {
    need net.eth0
}

你也可以在/etc/ppp/pap-secrets中定义你的密码。

代码 4.4: /etc/ppp/pap-secrets范例

# *号非常重要
"username"  *  "password"

如果你通过一个USB调制解调器来使用PPPoE,你需要emerge br2684ctl。请阅读/usr/portage/net-dialup/speedtouch-usb/files/README来了解如果正确的配置它。

重要: 请仔细阅读/etc/conf.d/net.example里有关ADSL和PPP的部分。它包含了你的PPP设定可能需要的设置的详尽解释。

3.e. APIPA(自动获得私有的IP地址)

APIPA通过在某网络接口arping在169.254.0.0-169.254.255.255范围内的某个随机地址的方式来在该范围内尝试寻找空闲地址。如果没有收到任何ARP应答,该IP地址就会被绑定到这个网络接口上。

只有在网络上不存在DHCP服务器,同时本机不直接连接到internet并且其他所有的计算机都使用APIPA时才适用。

为了支持APIPA,请emerge net-misc/iputilsnet-analyzer/arping

代码 5.1: /etc/conf.d/net中的APIPA配置

# 首先尝试DHCP——如果DHCP失败则使用APIPA
config_eth0=( "dhcp" )
fallback_eth0=( "apipa" )

# 只使用APIPA
config_eth0=( "apipa" )

3.f. 绑定

为了使用连接绑定,请emerge net-misc/ifenslave

绑定可以用来增加网络带宽。如果你有两块网卡连接到同一个网络,你可以把它们绑定在一起这样你的应用程序只看到一个网卡,但实际上却是在同时使用两个物理网卡传送数据。

代码 6.1: 在/etc/conf.d/net中配置绑定

# 把网络接口绑定在一起
slaves_bond0="eth0 eth1 eth2"

# 你可以不为绑定而得的网络接口配置IP地址
config_bond0=( "null" )

# 依赖eth0、eth1和eth2, 因为它们需要额外的配置
depend_bond0() {
  need net.eth0 net.eth1 net.eth2
}

3.g. 桥接(802.1d的支持)

为了获得对桥接支持,请emerge net-misc/bridge-utils

桥接是用来把两个网络连接在一起。举例来说,你有一台通过ADSL modem接入internet的服务器,它同时通过无线网卡为其他计算机提供internet接入服务。你就可以创建桥接把这两个网络接口连接在一起。

代码 7.1: /etc/conf.d/net中桥接的配置

# 配置桥接——可以使用"man brctl"来获得更多信息
brctl_br0=( "setfd 0" "sethello 0" "stp off" )

# 增加端口到网桥br0中
bridge_br0="eth0 eth1"

# 你需要把端口配置成null,这样dhcp就不会启动了
config_eth0=( "null" )
config_eth1=( "null" )

# 最后为网桥配置一个IP地址——你也可以使用DHCP
config_br0=( "192.168.0.1/24" )

# 依赖eth0和eth1,因为它们需要额外的配置
depend_br0() {
  need net.eth0 net.eth1
}

重要: 在使用一些桥接的设定时,你可能需要参考文档变量名称

3.h. MAC地址

如果你使用的是sys-apps/baselayout-1.11.14或者更新版本的话,你无需安装任何软件就可以更改网络接口对应的MAC地址或者为某个网络接口指定一个MAC地址。不过,如果你需要为网络接口指定一个随机的MAC地址或者你的baselayout的版本比上述版本要旧的话,你需要安装好net-analyzer/macchanger后才能使用这些功能。

代码 8.1: MAC地址变更示例

# 设置网络接口的MAC地址
mac_eth0="00:11:22:33:44:55"

# 只随机选择MAC地址的最后3个字节
mac_eth0="random-ending"

# 在同种物理连接类型(比如: 光纤、铜缆、无线)中随机选择,范围至所有制造商
mac_eth0="random-samekind"

# 在任意物理连接类型(比如: 光纤、铜缆、无线)中随机选择,范围至所有制造商
mac_eth0="random-anykind"

# 完全随机——警告: 一些通过这个方式获得的MAC地址有可能无法正常工作
mac_eth0="random-full"

3.i. 隧道

你不需要安装任何软件就可以使用隧道,因为网络接口处理程序会帮你做好这些事。

代码 9.1: 在/etc/conf.d/net中配置隧道

# GRE隧道
iptunnel_vpn0="mode gre remote 207.170.82.1 key 0xffffffff ttl 255"

# IPIP隧道
iptunnel_vpn0="mode ipip remote 207.170.82.2 ttl 255"

# 配置网络接口
config_vpn0=( "192.168.0.2 peer 192.168.1.1" ) 

3.j. VLAN(802.1q的支持)

为了获得对VLAN的支持,请emerge net-misc/vconfig.

虚拟局域网(Virtual LAN)是一组有如运作在同个网段的一组网络设备的集合——尽管实际上可能不是。VLAN成员只能看到同一VLAN的成员,哪怕和其他VLAN成员处于同一物理网段中。

代码 10.1: 在/etc/conf.d/net中配置VLAN

# 像这样为网络接口指定VLAN号
# 请确认每个VLAN号前面没有以0填充
vlans_eth0="1 2"

# 你也可以配置VLAN
# 查看vconfig的手册页获取更多的信息
vconfig_eth0=( "set_name_type VLAN_PLUS_VID_NO_PAD" )
vconfig_vlan1=( "set_flag 1" "set_egress_map 2 6" )

# 按通常方法配置网络接口
config_vlan1=( "172.16.3.1 netmask 255.255.254.0" )
config_vlan2=( "172.16.2.1 netmask 255.255.254.0" )

重要: 在使用一些VLAN的设定时,你可能需要查看文档变量名称


[ << ] [ < ] [ 主页 ] [ > ] [ >> ]


打印

查看全部

更新于2010年 1月 2日

总结: Gentoo为您提供了灵活的网络支持——本节将告诉你怎样选择不同的DHCP客户端程序,如何配置网络的绑定和桥接以及配置VLAN等等相关的知识。

Sven Vermeulen
作者

Grant Goodyear
作者

Roy Marples
作者

Daniel Robbins
作者

Chris Houser
作者

Jerry Alexandratos
作者

Seemant Kulleen
Gentoo x86开发人员

Tavis Ormandy
Gentoo Alpha开发人员

Jason Huebel
Gentoo AMD64开发人员

Guy Martin
Gentoo HPPA开发人员

Pieter Van den Abeele
Gentoo PPC开发人员

Joe Kallar
Gentoo SPARC开发人员

John P. Davis
编辑

Pierre-Henri Jondot
编辑

Eric Stockbridge
编辑

Rajiv Manglani
编辑

Jungmin Seo
编辑

Stoyan Zhekov
编辑

Jared Hudson
编辑

Colin Morey
编辑

Jorge Paulo
编辑

Carl Anderson
编辑

Jon Portnoy
编辑

Zack Gilburd
编辑

Jack Morgan
编辑

Benny Chuang
编辑

Erwin
编辑

Joshua Kinard
编辑

Tobias Scherbaum
编辑

Xavier Neys
编辑

Joshua Saddler
编辑

Gerald J. Normandin Jr.
审校

Donnie Berkholz
审校

Ken Nowack
审校

Lars Weiler
投稿

张乐
译者

杨珂
译者

陈永骥
译者

娄东斌
译者

余雷
译者

叶宝泰
译者

杨小广
译者

vivian.ye
译者

王国辉
译者

贾震
译者

余鈺炜
译者

陈代焱
译者

范华
译者

沈辰俊
译者

Donate to support our development efforts.

Support OSL
Gentoo Centric Hosting: vr.org
Tek Alchemy
SevenL.net
Global Netoptex Inc.
Bytemark
Edurium
Copyright 2001-2010 Gentoo Foundation, Inc. Questions, Comments? Contact us.