我们现在支持模块化的网络脚本,这意味着我们可以很方便地增添新的网络接口和配置模块,同时和原来已存在的模块或是接口保持良好的兼容性。
只要模块需要的软件包已安装,它就会被默认载入。如果你指定一个模块而它需要的软件包未被安装,则你就会收到一个错误信息通知你需要安装哪一个软件包。一般来说,只有当你安装了提供相同服务的两个及以上的软件包时,你才需要使用模块设定来选择你想使用其中的哪一个。
注意: 除非有特别说明,这里所讨论的全部设定都保存在/etc/conf.d/net中。 |
代码 1.1: 模块选择 |
# 选择iproute2而不用ifconfig modules=( "iproute2" ) # 你也可以为一个网络接口指定其他的模块 # 这个例子中我们希望使用pump来代替dhcpcd modules_eth0=( "pump" ) # 你也可以指定不使用哪一个模块——例如你一方面想使用supplicant或是 # linux-wlan-ng来控制无线网络配置,一方面又想配置每一个ESSID相关联的网络设定。 modules=( "!iwconfig" ) |
目前我们提供了两个网络接口处理程序:ifconfig和iproute2。你可以使用i这两个程序中的一个进行任意种类的网络配置。
ifconfig是目前Gentoo默认使用的网络接口处理程序,而且它也包含在系统的profile之中。iproute2是另一个灵活且强大的软件包,但是默认的系统配置中并不包含它。
代码 2.1: 安装iproute2 |
# emerge sys-apps/iproute2 # 在iproute2和ifconfig都已安装的情况下,选用iproute2 modules=( "iproute2" ) |
由于ifconfig和iproute2的功能很类似,我们允许使用它们的基本配置功能以使二者可以通用。例如说下面的代码片段对于它们之中的任何一个来说都是起效的。
代码 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" )
|
DHCP是一种通过DHCP服务器来获得相关的网络信息(比如IP地址、DNS服务器、网关等)的方式。这意味着如果在网络上存在着一个DHCP服务器的话,你只要让每一个客户端使用DHCP,这些客户端就会自动地配置好相关的网络设置。当然,如果在使用DHCP之前还需要配置无线网络或是PPP等其他设定的话,你就必须先配置好这些才行。
dhclient、dhcpcd或者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变量来支持下面这些命令,默认不使用它们中的任何一个:
代码 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地址 |
注意: 由于dhcpcd和pump默认会把主机名发送给DHCP服务器,所以你就可以不用去指定它了。 |
首先我们安装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设定可能需要的设置的详尽解释。 |
APIPA通过在某网络接口arping在169.254.0.0-169.254.255.255范围内的某个随机地址的方式来在该范围内尝试寻找空闲地址。如果没有收到任何ARP应答,该IP地址就会被绑定到这个网络接口上。
只有在网络上不存在DHCP服务器,同时本机不直接连接到internet并且其他所有的计算机都使用APIPA时才适用。
为了支持APIPA,请emerge net-misc/iputils或net-analyzer/arping。
代码 5.1: /etc/conf.d/net中的APIPA配置 |
# 首先尝试DHCP——如果DHCP失败则使用APIPA config_eth0=( "dhcp" ) fallback_eth0=( "apipa" ) # 只使用APIPA config_eth0=( "apipa" ) |
为了使用连接绑定,请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 } |
为了获得对桥接支持,请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 } |
重要: 在使用一些桥接的设定时,你可能需要参考文档变量名称 |
如果你使用的是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" |
你不需要安装任何软件就可以使用隧道,因为网络接口处理程序会帮你做好这些事。
代码 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" ) |
为了获得对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的设定时,你可能需要查看文档变量名称。 |
本文档的内容遵循知识共享-署名-相同方式共享许可协议