Netcfg (简体中文)

From ArchWiki
Revision as of 11:40, 10 April 2012 by Fengchao (Talk | contribs) (Change to zh_CN translateme.)

Jump to: navigation, search

This template has only maintenance purposes. For linking to local translations please use interlanguage links, see Help:i18n#Interlanguage links.


Local languages: Català – Dansk – English – Español – Esperanto – Hrvatski – Indonesia – Italiano – Lietuviškai – Magyar – Nederlands – Norsk Bokmål – Polski – Português – Slovenský – Česky – Ελληνικά – Български – Русский – Српски – Українська – עברית – العربية – ไทย – 日本語 – 正體中文 – 简体中文 – 한국어


External languages (all articles in these languages should be moved to the external wiki): Deutsch – Français – Română – Suomi – Svenska – Tiếng Việt – Türkçe – فارسی

Tango-preferences-desktop-locale.png本页面需要更新翻译,内容可能已经与英文脱节。要贡献翻译,请访问简体中文翻译组Tango-preferences-desktop-locale.png

附注: please use the first argument of the template to provide more detailed indications.
摘要 help replacing me
指导如何安装和配置 netcfg – 网络配置和配置文件脚本。
概览
Template:Networking overview (简体中文)
资源
netcfg 网络脚本仓库

节选自netcfg man page:

netcfg 通过配置文件来配置和管理网络连接. 支持一系列可插拨的连接类型,例如无线连接,以太网,ppp.也能够打开或结束多对一的连接,也就是多种连接写在同一个配置文件内,可选地粘合在一起

netcfg 对于寻求一个简单健壮的管理多种网络配置方式的用户来说非常有用(例如笔记本用户).对于只连接到一个网络的系统,network 守护进程会更合适.

准备

最简单的情况,用户至少要知道网络接口的名字(例如eth0 ,wlan0).如果配置的是固定IP地址,网关和DNS必须要填上.

如果连接到一个无线网络,必须知道一些基本的信息.对于无线网络这些信息包括使用的安全类型(WEP/WPA/WPA2),网络名(ESSID),和密码或密钥.另外,保证已经为无线设备安装了合适的驱动和固件,在Wireless Setup有相关描述.

安装

确保已经安装了最新版本的 netcfg.旧的版本有一些bug,而且可能与最新的驱动工作得不太好. netcfg 包在core :

# pacman -S netcfg

版本2.5.x ,有可选的依赖包括: 自动的移动无线网络需要的wpa_actiond –, 自动的以太网配置需要的 wpa_actiond

# pacman -S wpa_actiond ifplugd

如果需要netcfg的bash的自动补全支持:

# pacman -S bash-completion

配置

网络的配置文件在/etc/network.d目录.为尽量减少可能发生的错误,从/etc/network.d/examples/复制示例配置文件到/etc/network.d/mynetwork.文件的名字是网络配置文件的名字(文章里使用的例子是"mynetwork").文件的名字不是网络设置并且不需要与无线网络名称(SSID)相同.

根据连接类型与安全模式,使用下列/etc/network.d/examples里的文件作为基础.小心在互联网上找到的示例,因为它常常会包含会导致问题的不合适的选项.

Connection type/security Example profile
无线; WEP 16进制密钥 wireless-wep
无线; WEP 字符密钥 wireless-wep-string-key
无线; WPA 个人版 (passphrase) wireless-wpa
无线; WPA 企业版 wireless-wpa-config (wpa_supplicant configuration is external)
wireless-wpa-configsection (wpa_supplicant configuration stored as string)
有线; DHCP ethernet-dhcp
有线; 固定 IP ethernet-static
有线; iproute configuration ethernet-iproute

接下来,更改新的配置文件,/etc/network.d/mynetwork:

  • INTERFACE 为正确的无线或以太网接口. 这个可以用 ip linkiwconfig 检查.
  • 确保无线连接的 ESSIDKEY (passphrase) 设置正确. 在这些地方输入错误很常见.
    • 注意 WEP 字符 密钥 (不是 16进制 密钥) 必须在前面指定 s: (例 KEY="s:somepasskey").


注意: Netcfg 配置是可用的 Bash 脚本. 任何配置遇到特殊字符如 $ 或 \ 需要正确引用否则它会被 Bash 解释. 为避免解释, 用单引号或反斜杠.
Note: Network information (e.g. wireless passkey) will be stored in plain text format, so users may want to change the permissions on the newly created profile (e.g. chmod 0600 /etc/network.d/mynetwork to make it readable by root only).
Note: For WPA personal, it is also possible to use WPA passkey encoded into a hexadecimal string, instead of plain text passkey.

Follow the procedure on the WPA supplicant page's 1st example exercise to generate a hexadecimal string from you WPA passkey.
Save the new hexadecimal string into your wireless WPA profile in /etc/network.d/mynetwork as the value of KEY variable (make sure this will be the only KEY variable enabled), to look similar to this (replace the string with your one):

KEY='7b271c9a7c8a6ac07d12403a1f0792d7d92b5957ff8dfd56481ced43ec6a6515'

That should do it, without the need to reveal the passkey.


连接无线网络 (详)

搜集网络信息

  • 无线网络接口
    • 可以用 ifconfig 显示或者查看 /proc/net/wireless
  • 网络名称/ESSID
    • 检查无线网络是不是在'隐藏'状态 -- 通过iwlist scan能否搜查到呢?
  • 网络用什么样的加密系统
    • 支持的网络安全结构有:无加密,WEP加密,WPA加密.
  • 网络密码是什么
    • 只有在网络使用加密时才需要知道
  • IP设置, dhcp(自动获取)/static(静态地址)
    • 大部分无线网络使用DHCP. 如果不知道的话,使用DHCP就可以了.

创建配置文件

在 /etc/network.d/ 下建立一个新的网络配置。这个配置,实际上就是在 /etc/network.d 里面的一个文件. 这个文件的名字就是这个配置的名字, 你可以随意的起名, 名字是与连接的设置没有关系的。

建立一个配置的最简单的方法, 就是拷贝/etc/network.d/examples里和你所相似的配置范例。

将你刚才搜集到的信息编辑到配置里. 现在,将scan 参数设到'on'

配置示例

以下是以下连接示例. 你也可以在 /etc/network.d/examples中找到.

CONNECTION="wireless"
DESCRIPTION="A simple WEP encrypted wireless connection"
INTERFACE=wlan0
SCAN="yes"
SECURITY="wep"
ESSID="MyNetwork"
KEY="1234567890"
IP="dhcp"
CONNECTION="wireless"
INTERFACE=wlan0
SCAN="yes"
SECURITY="wpa"
ESSID="mynetwork"
KEY="SomePasskey"
IP="dhcp"
TIMEOUT=20

如果要更详尽的固定的连接,以及更多功能,可以查阅wireless(8) and ethernet(8) 操作指引(man文档).

连接

现在已经完成了设置,你可以开始输入命令 netcfg2 配置名 连接到你的网络。

如果在开机的时候自动连接到网络, 添加配置文件的文件名到 rc.conf中NETWORKS=()的那一行, 例如: NETWORKS=(home).

另外,要想开机连接网络就必须确定 net-profiles 同时存在于你的rc.conf中的 DAEMONS=()

如果连接不上网络, 看是否属于以下所列的情况. 如果还有其他的问题, 可以看以下的说明或者上 arch 论坛, IRC 以及邮件列表.

自动搜寻无线网络

netcfg v2.1 以及更高版本

自动选择无线网络功能已经包含在了 wireless networks.

修改/etc/rc.conf,添加auto-wireless $interface到AUTO_NETWORKS=()里面就可以启用这个功能。比如:

AUTO_NETWORKS=(auto-wireless ipw0)

当然也别忘记了添加net-auto到/etc/rc.conf里面的DAEMON行里去。

如果需要手动完成,就运行:/usr/bin/netcfg-auto-wireless $interface

netcfg v2.1以前版本

v2.0.3版本的netcfg 支持无线网络的搜寻. 要在开机的时候搜寻无线网络, 将"auto-wireless <interface>" 加入到NETWORKS=() 这一行. 就算这一行里是有其他的配置也没问题的, 例如:

NETWORKS=("auto-wireless <interface>" ipw0 ethernet)

要在开机后运行, 运行: /usr/bin/netcfg-auto-wireless $interface

另外, 在开机搜寻网络的话, 你可以在每个配置文件中设置 SCAN="yes", 并将他们加入到 /etc/rc.conf中的NETWORKS=()里 . 如果有无线网络的时候,系统就会自动的检测到, 当连上一个网络后将不会在连入另外的网络。


问题以及解决

没有用!!为什么?

请看最新的问题以及解决章节。为了找到哪里出现问题,我们需要更多信息,而不是仅仅说这样那样不行!为了节约人力物力,首先你需要仔细阅读搜索wiki或者搜索论坛。

Driver Quirks (netcfg 2.1以及更高版本)

Some drivers behave odd and need workarounds to connect. These have to be enabled manually. They're best determined by reading the forums, seeing what others have used, and if that fails trial and error. They can be combined.

参考翻译:一些驱动很奇怪,需要一些额外操作才能连接。这些必须手动启用。问题的最好解决是搜索论坛,看看别人是如何使用的,以及尝试了什么方法以及错误。可能问题就可以和你看到的内容联系起来解决。

  • prescan - Run "iwlist $INTERFACE scan" before attempting to connect (Some broadcom)
  • preessid - Run "iwconfig $INTERFACE essid $ESSID" before attempting to connect. (Some ipw3945 and Intel PRO/Wireless 4965AGN)
  • wpaessid - Same as previous, run before starting wpa_supplicant
  • predown - Take interface down before association and then restore it after. (madwifi)
  • postsleep - Sleep 1 second before checking if the association was successful
  • postscan - Run "iwlist scan" after associating

例如

QUIRKS=(prescan preessid)

如果你的DNS或者DHCP有问题,尝试添加下面一行到你的netcfg配置文件里面去:

DHCLIENT=no

这样netcfg就会使用dhcpcd而不会使用dhclient

如果你得到"Wireless Network Not Found"或者"Association Failed"的错误,并且你已经尝试了上面的做法,试试看加上:

SCAN=no

在连接网络前给 iwconfig 传递启动参数(只适用于netcfg 2.1以及更高版本)

简单的:

IWCONFIG="<arguments>"

<arguments>处可以是任何有效的 iwconfig参数。程序会运行"iwconfig $INTERFACE $IWCONFIG"

例如,设置bssid/ap mac:

IWCONFIG="ap 12:34:56:78:90:12"

This supercedes the IWOPTS option which was incompletely implemented.(参考翻译:这个参数会取代不完全执行的IWOPTS选项。- -b)

Network unavailable(网络不可用)

这一般是因为:

  • 超出范围,连接超时
  • 驱动问题(请看上面的Driver Quirks)
  • 尝试连接了一个隐藏的网络

如果你知道你要连接的网络是隐藏的,请设置

SCAN=no 

Wireless Association failed(无线网络连接失败)

这一般是因为:

  • 超出接受范围,连接超时
  • 错误的配置
  • 错误的密钥
  • 驱动问题(请看上面的Driver Quirks)

如果你知道是范围问题,添加TIMEOUT=可能有用

Unable to get IP address with DHCP(无法通过DHCP获得IP地址)

这一般是因为:

  • 超出范围,连接超时

尝试添加DHCP_TIMEOUT

Not a valid connection, check spelling or look at examples(不是一个可用连接,检查配置文件)

你必须设定CONNECTION= 为 "ethernet", "ppp",或者 "wireless"其中一项

Using a string WEP key(使用WEP字符串密钥)

下面设置只是STRING WEP密钥,不是HEX WEP密钥,也不是WPA密钥。 KEY="s:密钥"

老硬件rt2500, rt2400使用iwpriv替代

我没有打算支持这些的计划。但 rt2x00 目前被支持,很快就会不支持了。

如果你必须使用这些硬件,创建一个包含 iwpriv 命令的脚本,保存,赋予可执行权限,然后把这个文件路径放入 PRE_UP=""


如果仍然不管用我该怎么办

查看下面所有的FAQ。如果没有解决方法,那么就上论坛或者邮件里表提问。

提问的时候,记住必须提供尽可能多的信息,至少要包含下面命令的输出信息:

  • netcfg 所有输出,哪怕 netcfg 说运行成功
  • ifconfig -a
  • 连接前 iwconfig 的输出
  • /etc/network.d/ 下的配置文件,记住无线网络的密钥用别的替代,如 <censored>
  • lsmod

比发表一个很长很长的帖子或者邮件更好的方法是把脚本粘贴到一些专门粘贴的网站。 Pastierafb|Nopaste是两个很热门的。这里也有个 rafb 的命令行前端:

# pacman -S nopaste

GUI图形界面

目前已经有个基于 Qt 的 netcfg2 图形前端,叫做 ArchAssistant。这个软件是在系统托盘里管理、连接或者断开多个网络配置。它也有无线网络的自动搜寻功能。它对于笔记本电脑用户特别有用。

链接: archassistant on AUR | kde-apps.org | archassistant package on archlinux.fr i686 and x86_64

FAQ

我如何在启动的时候有个选择的列表,就如老的 netcfg 一样的?

在 rc.conf 设置 NETWORKS=(menu)

你也可以在终端下通过运行 netcfg-menu 得到一个列表。

为什么 netcfg 不能干某某某某事情?

netcfg 不必这样,他只是用来联网的。

但是 netcfg 模块化和可以扩展的。看看/usr/lib/networks/ -- 你可以用自己的脚本完成很多扩展功能。

为什么netcfg不怎么样怎么样呢,这样更好啊?

netcfg不强制使用什么规则。它的任务只是网络连接。它也没有一些启发式的功能,如“当连接到有线网络时自动断开无线连接”。

如果你想要类似的功能,借助netcfg可以很容易写出一个工具。查看上述问题。

我在使用netcfg的时候还需要这些文件么?

  • /etc/hosts: 是的,这个文件很重要,不要把你的主机名删除了,不然你会遇到很多很多奇怪的问题
  • HOSTNAME= in /etc/rc.conf: 强烈建议你保留,否则如果配置失败就没有主机名了
  • 在/etc/rc.conf里面的AEMONS=(network)和INTERFACES=(): 如果你使用netcfg2设置了你所有的网络连接,那么你可以删除掉这两行,你也可以删除lo相关行,非常安全,因为相关内容已经从rc.sysinit删除了。
  • lo: 默认已经在rc.sysinit里面设置好了,你不需要在任何地方配置了。