Difference between revisions of "Network configuration (简体中文)"

From ArchWiki
Jump to: navigation, search
(Update translation)
(update translation)
Line 23: Line 23:
 
{{Article summary wiki|Wireless Setup}}
 
{{Article summary wiki|Wireless Setup}}
 
{{Article summary end}}
 
{{Article summary end}}
{{TranslationStatus (简体中文)|Configuring_Network|2012-10-14|228346}}
+
{{TranslationStatus (简体中文)|Configuring_Network|2012-10-25|230520}}
 +
{{Out of date|这篇文章仍旧使用 rc.conf,它已经过时。}}
  
== 前期检查 ==
+
== 检查连接 ==
  
 
大多数情况下,基本的安装过程已经创建了正确的网络配置。通过运行以下命令来检查:
 
大多数情况下,基本的安装过程已经创建了正确的网络配置。通过运行以下命令来检查:
Line 43: Line 44:
  
 
如果上面的命令说 unknown hosts,意思是你的机器无法进行域名解析。这可能和你的服务提供商或者你的路由器/网关有关。你可以尝试 ping 一个静态的 IP 地址来验证你的电脑是否能访问 Internet。
 
如果上面的命令说 unknown hosts,意思是你的机器无法进行域名解析。这可能和你的服务提供商或者你的路由器/网关有关。你可以尝试 ping 一个静态的 IP 地址来验证你的电脑是否能访问 Internet。
+
 
 +
{{注意|选项 {{ic|-c 3}} 表示发送三次。参见 {{ic|man ping}} 获得更多信息。}}
 +
 
 
{{hc|$ ping -c 3 8.8.8.8|2=
 
{{hc|$ ping -c 3 8.8.8.8|2=
 
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
 
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
Line 54: Line 57:
 
rtt min/avg/max/mdev = 52.975/65.375/72.543/8.803 ms}}
 
rtt min/avg/max/mdev = 52.975/65.375/72.543/8.803 ms}}
  
{{小贴士|8.8.8.8 是一个容易记忆的静态地址。它是 Google 的主 DNS 服务器,因此它可以视为可信的,通常不会被过滤系统或代理屏蔽。}}
+
{{注意|{{ic|8.8.8.8}} 是一个容易记忆的静态地址。它是 Google 的主 DNS 服务器,因此它可以视为可信的,通常不会被过滤系统或代理屏蔽。}}
  
如果你能够 ping 通这个地址,你可以尝试 [[#静态 IP|添加域名服务器到 resolv.conf 文件]]。
+
如果你能够 ping 通这个地址,你可以尝试把这个域名服务器添加到 {{ic|/etc/resolv.conf}} 文件中。
  
 
== 设置计算机名 ==
 
== 设置计算机名 ==
  
主机名是在一个网络中唯一标识机器的名称。在 Arch Linux 中,主机名通过 {{ic|/etc/hostname}}命令。主机名只能使用字母,可以使用横杠 ({{ic|-}}) 但不能以横杠开头或结尾。最长为 63 字符。
+
[[Wikipedia:Hostname|主机名]] 是一个网络中唯一标识一台机器的名称。要设置你的主机名,只要在 {{ic|/etc/hostname}} 中写入它:
 +
 
 +
{{Box BLUE|注意:|
 +
* 如果文件不存在,则创建它。
 +
* 长度限制为63个''数字和字母''的字符。可以使用横杠({{ic|-}}),但不能以横杠开头或结尾。
 +
* 不要添加任何注释或空行。
 +
* 不要使用域名。}}
  
在{{ic|/etc/hostname}}中写入主机名,不要写入域名。如果文件不存在,则创建它,本例中的主机名为{{ic|myhostname}}:
 
 
{{hc|/etc/hostname|
 
{{hc|/etc/hostname|
'''myhostname'''}}
+
''myhostname''}}
  
设置主机名后,请在 {{ic|/etc/hosts}} 中设置相同的主机名。这样进程可以用主机名获取计算机的 IP 地址,依赖于 {{ic|gethostname()}} 系统调用的程序也能够正确获得主机名。
+
设置主机名后,请在 {{ic|/etc/hosts}} 中设置相同的主机名。这能使进程用主机名获取计算机的 IP 地址,或者依赖于 {{ic|gethostname()}} 系统调用的程序也能够获得主机名。
 
 
编辑 {{ic|/etc/hosts}},添加 {{ic|/etc/hostname}} 的使用的主机名:
 
  
 +
{{注意|完全资格域名([[Wikipedia:Fully_qualified_domain_name|FQDN]])应该设置为 '''紧随 IP 地址的第一项内容'''。右边的内容都是最左边主机/域名的别名。可以通过 {{ic|hostname --fqdn}} 命令查看是否配置正确。}}
 +
 +
{{hc|/etc/hosts|
 
   127.0.0.1  '''myhostname''' localhost
 
   127.0.0.1  '''myhostname''' localhost
   ::1        '''myhostname''' localhost
+
   ::1        '''myhostname''' localhost}}
  
{{注意|完整的主机名 (FQDN) 应该设置为 '''紧随 IP 地址的第一项内容'''. 右面的内容都是其别名。可以通过 {{ic|hostname --fqdn}} 命令查看是否配置正确。}}
+
要临时设置主机名(直到下次重启为止),使用 {{Pkg|inetutils}} 中的 {{ic|hostname}} 命令:
  
直到下次重启临时设置主机名,可以使用 {{Pkg|inetutils}} 中的 {{ic|hostname}} 命令,以 root 权限执行:
+
  # hostname ''myhostname''
 
 
  # hostname archlinux
 
  
 
== 设备驱动程序 ==
 
== 设备驱动程序 ==
Line 83: Line 90:
 
=== 检测驱动状态 ===
 
=== 检测驱动状态 ===
  
Udev 会自动探测网卡(NIC)模块并在启动时自动加载。 检查{{ic|lspci -v}}输出中的 "Ethernet controller" 条目,它会告诉你哪个内核模块包含了网络设备的驱动程序。例如:
+
Udev 会探测网卡([[Wikipedia:Network_interface_controller|NIC]])并在启动时自动载入必要的模块。 检查 {{ic|lspci -v}} 输出中 "Ethernet controller" (或者类似的)条目,它会告诉你哪个内核模块包含了网络设备的驱动程序。例如:
 +
 
 
{{hc|$ lspci -v|
 
{{hc|$ lspci -v|
 
  02:00.0 Ethernet controller: Attansic Technology Corp. L1 Gigabit Ethernet Adapter (rev b0)
 
  02:00.0 Ethernet controller: Attansic Technology Corp. L1 Gigabit Ethernet Adapter (rev b0)
Line 90: Line 98:
 
  Kernel modules: atl1}}
 
  Kernel modules: atl1}}
  
接下来,通过 ''dmesg | grep <module name>'' 来检查是否已经加载了驱动。例如:
+
接下来, 用 {{ic|dmesg <nowiki>|</nowiki> grep ''module_name''}} 来检查是否已经加载了驱动。例如:
 
  $ dmesg |grep atl1
 
  $ dmesg |grep atl1
 
     ...
 
     ...
 
     atl1 0000:02:00.0: eth0 link is up 100 Mbps full duplex
 
     atl1 0000:02:00.0: eth0 link is up 100 Mbps full duplex
  
如果驱动加载成功,就跳过这一节,否则,你需要知道您特定型号的网络设备需要哪一个模块。
+
如果驱动加载成功,就跳过下一节,否则,你需要知道您特定型号的网络设备需要哪一个模块。
  
 
=== 加载设备模块 ===
 
=== 加载设备模块 ===
  
用 Google 查找适合芯片需要的模块/驱动。确定模块名之后,可以手动加载:
+
用 Google 查找芯片组需要的模块/驱动。确定模块名之后,可以手动[[Kernel modules#Loading|加载它]]:
  
  # modprobe <模块名>
+
  # modprobe ''模块名''
  
如果 [[udev]] 不能在启动时字段探测和加载合适的模块,你可以添加到{{ic|/etc/rc.conf}}中的{{ic|MODULES}}数组中,这样就不用每次启动都运行 {{ic|modprobe}} 了。例如,如果 {{ic|tg3}} 是需要的网络模块:
+
如果 udev 不能在启动时自动探测和加载合适的模块,你可以把它添加到 {{ic|/etc/module-load.d}} 目录下的一个 {{ic|*.conf}} 文件中,这样就不用每次启动都运行 {{ic|modprobe}} 了。例如,如果 {{ic|tg3}} 是需要的网络模块:
  
MODULES=(... tg3 snd-cmipci ...)
+
  # tee /etc/modules-load.d/tg3.conf <<< "tg3"
  
其他常见的模块是 8139too (Realtek 芯片);sis900 (SiS 卡)。
+
其他常见的有 Realtek 芯片组用的 {{ic|8139too}},或者 SiS 芯片组用的 {{ic|sis900}} 模块。
  
 
== 网络接口 ==
 
== 网络接口 ==
Line 113: Line 121:
 
=== 固定网络名 ===
 
=== 固定网络名 ===
  
使用多个网卡的设备,需要先确定要使用的网络设备是主网卡(即''eth0''),还是第二个网卡(eth1)。大部分配置问题都是由于用户在{{ic|/etc/rc.conf}}中配置了 ''eth0'',但实际情况下却把以太网电缆连到了 ''eth1''
+
使用多个网卡的设备,需要先确定要使用的网络设备是主网卡(即{{ic|eth0}}),还是第二个网卡({{ic|eth1}})。大部分配置问题都是由于用户配置了 {{ic|eth0}}的网络,但实际情况下却把以太网电缆连到了 {{ic|eth1}}
  
[[Udev]] 负责给设备命名。由于使用了 Udev 和 模块化的网卡驱动,默认情况下重启之后网络接口的编号不是固定的,这是因为驱动程序是并行载入的,也就是说,顺序是随机的。如果你不知道你的网卡会被称作是{{ic|eth0}}还是{{ic|eht1}},配置网络连接会变得很困难。你可以使用{{ic|ifrename}}来修复这个问题,参见 [[Rename network interfaces|重命名网络接口]]。你也可以手工创建 udev 规则,依据接口的 MAC 地址分配接口名称,参见 [[Udev#Network device|固定设备名称]]。
+
[[Udev]] 负责给设备命名。由于使用了 udev 和 模块化的网卡驱动,默认情况下重启之后网络接口的编号不是固定的,这是因为驱动程序是并行载入的,也就是说,顺序是随机的。如果你不知道你的网卡会被称作是{{ic|eth0}}还是{{ic|eht1}},配置网络连接会变得很困难。你可以使用{{ic|ifrename}}来修复这个问题,参见 [[Rename network interfaces|重命名网络接口]]。你也可以手工创建 udev 规则,依据接口的 MAC 地址分配接口名称,参见 [[Udev#Network device]]。
  
 
=== 获取当前网络名 ===
 
=== 获取当前网络名 ===
可以用 ''ip'' 工具获得。
+
 
{{hc|<nowiki># ip addr | sed '/^[0-9]/!d;s/: <.*$//'</nowiki>|
+
可以用 {{ic|ip}} 工具找到当前的 NIC 名称:
 +
 
 +
{{hc|$ ip addr <nowiki>|</nowiki> sed '/^[0-9]/!d;s/: <.*$//'|
 
1: lo
 
1: lo
 
2: eth1
 
2: eth1
Line 125: Line 135:
 
4: firewire0}}
 
4: firewire0}}
  
=== 启用禁用接口 ===
+
=== 启用和禁用网络接口 ===
  
 
可以通过如下命令启用或禁用接口:
 
可以通过如下命令启用或禁用接口:
# ip link set <interface> up/down
 
  
使用 {{ic|ip addr show dev eth0}} 来查看结果。例如:
+
# ip link set eth0 up
 +
# ip link set eth0 down
 +
 
 +
查看结果:
  
{{hc|# ip addr show dev eth0|
+
{{hc|$ ip addr show dev eth0|
  2: eth0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc vboxnetflt state UP qlen 1000
+
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 100
  [...]}}
+
[...]}}
  
 
== 配置 IP 地址 ==
 
== 配置 IP 地址 ==
  
有两种配置方式:通过 DHCP 动态获取或者设置为静态地址。参见 [[Wikipedia:Dynamic Host Configuration Protocol|Wikipedia:DHCP]]
+
有两种配置方式:通过 [[Wikipedia:Dynamic Host Configuration Protocol|DHCP]],或者不变的''静态''地址。
  
=== DHCP (自动获取)  IP ===
+
=== 动态 IP 地址 ===
  
 
==== 手工运行 DHCP 客户端守护进程 ====
 
==== 手工运行 DHCP 客户端守护进程 ====
Line 152: Line 164:
 
  dhcpcd: eth0: leased 192.168.1.70 for 86400 seconds}}
 
  dhcpcd: eth0: leased 192.168.1.70 for 86400 seconds}}
  
现在 {{ic|ip addr show dev <interface>}} 将列出你的网络地址。
+
现在,{{ic|ip addr show dev eth0}} 将列出你的网络地址。
  
在某些情况下,{{ic|dhclient}} 包(位于 [extra]中)有用,而 {{ic|dhcpcd}} 却会失败。
+
对一些人来说,{{ic|dhcpcd}} 失败时,{{ic|dhclient}}(位于软件包 {{Pkg|dhclient}} 中)会有用。
  
 
==== 启动时运行 DHCP ====
 
==== 启动时运行 DHCP ====
  
这种方式下,您需要安装 {{Pkg|dhcpcd}} 包(绝大多数情况下都是默认安装好的),像这样编辑 {{ic|[[Rc.conf#Networking|/etc/rc.conf]]}}:
+
如果你只想在你的以太网连接上使用 DHCP,你可以使用 {{ic|dhcpcd@.service}} (由软件包 {{Pkg|dhcpcd}} 提供)。
 +
 
 +
要在 {{ic|eth0}} 启用的 DHCP,只要调用:
 +
 +
# systemctl start dhcpcd@eth0.service
 +
 
 +
你能这样来使这个服务在启动时自动启用:
 +
 
 +
  # systemctl enable dhcpcd@eth0.service
  
interface="eth0"
+
如果 dhcpd 服务在你的网卡模块之前启动({{bug|30235}}),手动地把你的网卡添加到 {{ic|/etc/modules-load.d/*.conf}} 中。例如,如果你的 Realtek 网卡需要载入 {{ic|r8169}},创建:
address=
 
netmask=
 
gateway=
 
  
只需要修改 interface,其它内容为空。
+
{{hc|/etc/modules-load.d/realtek.conf|
 +
r8169}}
  
如果你使用 DHCP 自动获取 IP 地址,但是'''不'''想每次启动网络的时候让 DHCP 更改你的 DNS 服务器(域名服务器),在 {{ic|/etc/dhcpcd.conf}} 的最后一部分中添加:
+
如果你使用 DHCP 自动获取 IP 地址,但是'''不'''想每次启动网络的时候让 DHCP 更改你的 DNS 服务器(域名服务器),在 {{ic|dhcpcd.conf}} 的最后一部分中添加:
  
nohook resolv.conf
+
{{hc|/etc/dhcpcd.conf|
 +
nohook resolv.conf}}
  
 
 
在 {{ic|/etc/dhcpcd.conf}} 中使用 nooption 选项来阻止 dhcpcd 向 {{ic|/etc/resolve.conf}} 添加域名服务器:
 
在 {{ic|/etc/dhcpcd.conf}} 中使用 nooption 选项来阻止 dhcpcd 向 {{ic|/etc/resolve.conf}} 添加域名服务器:
  
nooption domain_name_servers
+
{{hc|/etc/dhcpcd.conf|
 +
nooption domain_name_servers}}
  
 
然后把你自己的 DNS 服务器添加到 {{ic|/etc/resolv.conf}}.
 
然后把你自己的 DNS 服务器添加到 {{ic|/etc/resolv.conf}}.
  
 
重启 {{ic|/etc/rc.d/network}} 守护进程测试配置是否成功:
 
重启 {{ic|/etc/rc.d/network}} 守护进程测试配置是否成功:
 +
 
  # /etc/rc.d/network restart
 
  # /etc/rc.d/network restart
  
如果多个不同进程都会更改{{ic|/etc/resolv.conf}} (例如 {{Pkg|dhcpcd}} 和 VPN 客户端),请安装 {{Pkg|openresolv}} 软件包,使用它不需要额外地配置{{Pkg|dhcpcd}}。
+
如果多个不同进程都会更改{{ic|/etc/resolv.conf}} (例如,{{Pkg|dhcpcd}} 和 VPN 客户端),请安装 {{Pkg|openresolv}} 软件包,使用它不需要额外地配置{{Pkg|dhcpcd}}。
 +
 
 +
{{注意|1= {{Pkg|dhcpcd}} 也能获取静态地址,只需要将 {{ic|/etc/conf.d/dhcpcd}} 文件修改为(其中 x.x.x.x 为需要的 IP 地址):
 +
 
 +
{{bc|1=DHCPCD_ARGS="-q -s x.x.x.x"}}}}
  
{{注意|1= {{Pkg|dhcpcd}} 也能获取静态地址,只需要将 {{ic|/etc/conf.d/dhcpcd}} 文件修改为:
 
DHCPCD_ARGS="-q -s x.x.x.x"}}
 
x.x.x.x 为需要的 IP 地址。
 
  
 
=== 静态 IP 地址 ===
 
=== 静态 IP 地址 ===
  
使用静态 IP 地址有多种原因,例如得到一些确定性,或者需要在不想让 dhcp 后台一直在运行。
+
使用静态 IP 地址有多种原因,例如通过不变的IP地址获得一定程度的可预测性,或者你没有可用的 DHCP 服务器。
  
 
{{注意|在不使用路由器的情况下和一台安装 Windows 的电脑分享你的网络连接,请确保两台电脑都使用静态 IP ,否则你的局域网将会有问题。}}
 
{{注意|在不使用路由器的情况下和一台安装 Windows 的电脑分享你的网络连接,请确保两台电脑都使用静态 IP ,否则你的局域网将会有问题。}}
Line 195: Line 216:
 
需要确定:
 
需要确定:
  
* 静态IP地址;
+
* 静态IP地址,
* 子网掩码;
+
* [[Wikipedia:Subnetwork|子网掩码]],
* 广播地址;
+
* [[Wikipedia:Broadcast_address|广播地址]],
* 网关的IP地址;
+
* [[Wikipedia:Default_gateway|网关]的IP地址,
* DNS 服务器(域名服务器)的 IP 地址;
+
* [[Wikipedia:Name_server|域名服务器]]的 IP 地址;
 
* 域名(局域网可以任意设置)。
 
* 域名(局域网可以任意设置)。
  
如果你想配置一个内部网络,可以将你的 IP 设置成 192.168.*.* ,子网掩码设置成 255.255.255.0 ,广播地址设置成 192.168.*.255 。除非你的网络拥有路由器,否则网关地址不重要。参考下面的例子编辑你的 {{ic|/etc/rc.conf}} ,使用你自己的 IP ,掩码,广播地址和网关替换:
+
如果你想配置一个内部网络,可以将你的 IP 设置成 192.168.*.* ,子网掩码设置成 255.255.255.0 ,广播地址设置成 192.168.*.255 。网关通常是 192.168.*.1 或者 192.168.*.254。如果你没有网关(read: router),那么把它留为空白。参考下面的例子编辑你的 {{ic|/etc/rc.conf}} ,使用你自己的 IP ,掩码,广播地址和网关替换:
  
 
  interface=eth0
 
  interface=eth0
Line 222: Line 243:
 
你可以在终端中指定一个静态 IP:
 
你可以在终端中指定一个静态 IP:
  
  # ip addr add <ip address>/<netmask> dev <interface>
+
  # ip addr add <IP 地址>/<子网掩码> dev <interface>
  
 
例如:
 
例如:
  
 
  # ip addr add 192.168.1.2/24 dev eth0
 
  # ip addr add 192.168.1.2/24 dev eth0
 +
 +
{{注意|子网掩码使用 [[Wikipedia:CIDR_notation|CIDR 表示法]]。}}
  
 
更多选项参见:{{ic|man ip}}
 
更多选项参见:{{ic|man ip}}
Line 232: Line 255:
 
如此添加你的网关(用你的网关 IP 替换):
 
如此添加你的网关(用你的网关 IP 替换):
  
  # ip route add default via <ip address>
+
  # ip route add default via <默认网关的 IP 地址>
  
 
例如:
 
例如:
Line 238: Line 261:
 
  # ip route add default via 192.168.1.1
 
  # ip route add default via 192.168.1.1
  
如要你看到 "No such process" 的错误,这意味着你必须运行{{ic|# ip link set dev eth0 up}}。
+
如要你看到 "No such process" 的错误,这意味着你必须以root权限运行{{ic|ip link set dev eth0 up}}。
  
 
==== 计算地址 ====
 
==== 计算地址 ====
Line 355: Line 378:
 
=== 更改 MAC/硬件地址 ===
 
=== 更改 MAC/硬件地址 ===
  
通过{{ic|/etc/rc.conf}}文件更改你的MAC地址的方法不再可用. 详情参见[[MAC Address Spoofing]]。
+
参见 [[MAC Address Spoofing]]。
  
 
== 疑难排解 ==
 
== 疑难排解 ==

Revision as of 04:28, 25 October 2012

ro:Configurare retea Template:Article summary start Template:Article summary text Template:Article summary heading Template:Article summary text Template:Article summary heading Template:Article summary wiki Template:Article summary wiki Template:Article summary wiki Template:Article summary wiki Template:Article summary end

翻译状态: 本文是英文页面 Configuring_Network翻译,最后翻译时间:2012-10-25,点击这里可以查看翻译后英文页面的改动。

Tango-view-refresh-red.pngThis article or section is out of date.Tango-view-refresh-red.png

Reason: 这篇文章仍旧使用 rc.conf,它已经过时。 (Discuss in Talk:Network configuration (简体中文)#)

检查连接

大多数情况下,基本的安装过程已经创建了正确的网络配置。通过运行以下命令来检查:

$ ping -c 3 www.google.com
PING www.l.google.com (74.125.224.146) 56(84) bytes of data.
64 bytes from 74.125.224.146: icmp_req=1 ttl=50 time=437 ms
64 bytes from 74.125.224.146: icmp_req=2 ttl=50 time=385 ms
64 bytes from 74.125.224.146: icmp_req=3 ttl=50 time=298 ms

--- www.l.google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 298.107/373.642/437.202/57.415 ms
提示: 参数 -c 3 表示执行命令 ping 3次 。 参见 man ping

如果像上面这样成功运行,那么你只需要进行下面这些个人配置。

如果上面的命令说 unknown hosts,意思是你的机器无法进行域名解析。这可能和你的服务提供商或者你的路由器/网关有关。你可以尝试 ping 一个静态的 IP 地址来验证你的电脑是否能访问 Internet。

注意: 选项 -c 3 表示发送三次。参见 man ping 获得更多信息。
$ ping -c 3 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_req=1 ttl=53 time=52.9 ms
64 bytes from 8.8.8.8: icmp_req=2 ttl=53 time=72.5 ms
64 bytes from 8.8.8.8: icmp_req=3 ttl=53 time=70.6 ms

--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 52.975/65.375/72.543/8.803 ms
注意: 8.8.8.8 是一个容易记忆的静态地址。它是 Google 的主 DNS 服务器,因此它可以视为可信的,通常不会被过滤系统或代理屏蔽。

如果你能够 ping 通这个地址,你可以尝试把这个域名服务器添加到 /etc/resolv.conf 文件中。

设置计算机名

主机名 是一个网络中唯一标识一台机器的名称。要设置你的主机名,只要在 /etc/hostname 中写入它:

注意:
  • 如果文件不存在,则创建它。
  • 长度限制为63个数字和字母的字符。可以使用横杠(-),但不能以横杠开头或结尾。
  • 不要添加任何注释或空行。
  • 不要使用域名。
/etc/hostname
myhostname

设置主机名后,请在 /etc/hosts 中设置相同的主机名。这能使进程用主机名获取计算机的 IP 地址,或者依赖于 gethostname() 系统调用的程序也能够获得主机名。

注意: 完全资格域名(FQDN)应该设置为 紧随 IP 地址的第一项内容。右边的内容都是最左边主机/域名的别名。可以通过 hostname --fqdn 命令查看是否配置正确。
/etc/hosts
  127.0.0.1  myhostname localhost
  ::1        myhostname localhost

要临时设置主机名(直到下次重启为止),使用 inetutils 中的 hostname 命令:

# hostname myhostname

设备驱动程序

检测驱动状态

Udev 会探测网卡(NIC)并在启动时自动载入必要的模块。 检查 lspci -v 输出中 "Ethernet controller" (或者类似的)条目,它会告诉你哪个内核模块包含了网络设备的驱动程序。例如:

$ lspci -v
 02:00.0 Ethernet controller: Attansic Technology Corp. L1 Gigabit Ethernet Adapter (rev b0)
 	...
 	Kernel driver in use: atl1
 	Kernel modules: atl1

接下来, 用 dmesg | grep module_name 来检查是否已经加载了驱动。例如:

$ dmesg |grep atl1
   ...
   atl1 0000:02:00.0: eth0 link is up 100 Mbps full duplex

如果驱动加载成功,就跳过下一节,否则,你需要知道您特定型号的网络设备需要哪一个模块。

加载设备模块

用 Google 查找芯片组需要的模块/驱动。确定模块名之后,可以手动加载它

# modprobe 模块名

如果 udev 不能在启动时自动探测和加载合适的模块,你可以把它添加到 /etc/module-load.d 目录下的一个 *.conf 文件中,这样就不用每次启动都运行 modprobe 了。例如,如果 tg3 是需要的网络模块:

 # tee /etc/modules-load.d/tg3.conf <<< "tg3"

其他常见的有 Realtek 芯片组用的 8139too,或者 SiS 芯片组用的 sis900 模块。

网络接口

固定网络名

使用多个网卡的设备,需要先确定要使用的网络设备是主网卡(即eth0),还是第二个网卡(eth1)。大部分配置问题都是由于用户配置了 eth0的网络,但实际情况下却把以太网电缆连到了 eth1

Udev 负责给设备命名。由于使用了 udev 和 模块化的网卡驱动,默认情况下重启之后网络接口的编号不是固定的,这是因为驱动程序是并行载入的,也就是说,顺序是随机的。如果你不知道你的网卡会被称作是eth0还是eht1,配置网络连接会变得很困难。你可以使用ifrename来修复这个问题,参见 重命名网络接口。你也可以手工创建 udev 规则,依据接口的 MAC 地址分配接口名称,参见 Udev#Network device

获取当前网络名

可以用 ip 工具找到当前的 NIC 名称:

$ ip addr | sed '/^[0-9]/!d;s/: <.*$//'
1: lo
2: eth1
3: eth0
4: firewire0

启用和禁用网络接口

可以通过如下命令启用或禁用接口:

# ip link set eth0 up
# ip link set eth0 down

查看结果:

$ ip addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 100
[...]

配置 IP 地址

有两种配置方式:通过 DHCP,或者不变的静态地址。

动态 IP 地址

手工运行 DHCP 客户端守护进程

请注意,运行的是 dhcpcd 而并非 dhcpd

$ dhcpcd eth0
 dhcpcd: version 5.1.1 starting
 dhcpcd: eth0: broadcasting for a lease
 ...
 dhcpcd: eth0: leased 192.168.1.70 for 86400 seconds

现在,ip addr show dev eth0 将列出你的网络地址。

对一些人来说,dhcpcd 失败时,dhclient(位于软件包 dhclient 中)会有用。

启动时运行 DHCP

如果你只想在你的以太网连接上使用 DHCP,你可以使用 dhcpcd@.service (由软件包 dhcpcd 提供)。

要在 eth0 启用的 DHCP,只要调用:

# systemctl start dhcpcd@eth0.service

你能这样来使这个服务在启动时自动启用:

 # systemctl enable dhcpcd@eth0.service

如果 dhcpd 服务在你的网卡模块之前启动(FS#30235),手动地把你的网卡添加到 /etc/modules-load.d/*.conf 中。例如,如果你的 Realtek 网卡需要载入 r8169,创建:

/etc/modules-load.d/realtek.conf
r8169

如果你使用 DHCP 自动获取 IP 地址,但是想每次启动网络的时候让 DHCP 更改你的 DNS 服务器(域名服务器),在 dhcpcd.conf 的最后一部分中添加:

/etc/dhcpcd.conf
nohook resolv.conf

/etc/dhcpcd.conf 中使用 nooption 选项来阻止 dhcpcd 向 /etc/resolve.conf 添加域名服务器:

/etc/dhcpcd.conf
nooption domain_name_servers

然后把你自己的 DNS 服务器添加到 /etc/resolv.conf.

重启 /etc/rc.d/network 守护进程测试配置是否成功:

# /etc/rc.d/network restart

如果多个不同进程都会更改/etc/resolv.conf (例如,dhcpcd 和 VPN 客户端),请安装 openresolv 软件包,使用它不需要额外地配置dhcpcd

注意: dhcpcd 也能获取静态地址,只需要将 /etc/conf.d/dhcpcd 文件修改为(其中 x.x.x.x 为需要的 IP 地址):
DHCPCD_ARGS="-q -s x.x.x.x"


静态 IP 地址

使用静态 IP 地址有多种原因,例如通过不变的IP地址获得一定程度的可预测性,或者你没有可用的 DHCP 服务器。

注意: 在不使用路由器的情况下和一台安装 Windows 的电脑分享你的网络连接,请确保两台电脑都使用静态 IP ,否则你的局域网将会有问题。

需要确定:

如果你想配置一个内部网络,可以将你的 IP 设置成 192.168.*.* ,子网掩码设置成 255.255.255.0 ,广播地址设置成 192.168.*.255 。网关通常是 192.168.*.1 或者 192.168.*.254。如果你没有网关(read: router),那么把它留为空白。参考下面的例子编辑你的 /etc/rc.conf ,使用你自己的 IP ,掩码,广播地址和网关替换:

interface=eth0
address=192.168.0.2
netmask=255.255.255.0
broadcast=192.168.1.255
gateway=192.168.22.1

参考下面的例子编辑 /etc/resolv.conf ,使用你自己的域名服务器的 IP 和你的域名:

nameserver 61.23.173.5
nameserver 61.95.849.8
search example.com
注意: 当前最多支持 3 个 nameserver 行。

手动指定

你可以在终端中指定一个静态 IP:

# ip addr add <IP 地址>/<子网掩码> dev <interface>

例如:

# ip addr add 192.168.1.2/24 dev eth0
注意: 子网掩码使用 CIDR 表示法

更多选项参见:man ip

如此添加你的网关(用你的网关 IP 替换):

# ip route add default via <默认网关的 IP 地址>

例如:

# ip route add default via 192.168.1.1

如要你看到 "No such process" 的错误,这意味着你必须以root权限运行ip link set dev eth0 up

计算地址

可以用 ipcalc 软件包提供的 ipcalc 工具自动计算 IP 广播、子网掩码、主机范围等。例如通过火线连接视窗系统主机到 Arch。为了安全和网络组织,将它们分到独立的网络中,然后配置子网掩码和广播地址,网络中只有2台主机。要找出掩码和广播地址,我使用了 ipcalc,提供了它 arch firewire nic 的 IP 地址10.66.66.1,并告诉 ipcalc 要建立一个只有2台主机的网络。

$ ipcalc -nb 10.66.66.1 -s 1
Address:   10.66.66.1

Netmask:   255.255.255.252 = 30
Network:   10.66.66.0/30
HostMin:   10.66.66.1
HostMax:   10.66.66.2
Broadcast: 10.66.66.3
Hosts/Net: 2                     Class A, Private Internet

载入设置

想测试你的设置,可以重启计算机,或者在 root (超级用户)下运行:

# rc.d restart network

试着按照这个顺序 ping 一些网络地址:你的网关, DNS 服务器(域名服务器), ISP 服务提供商,以及其他的网络地址。这样可以检查你的网络连接在哪里出了问题。如:

$ ping -c 3 www.google.com

更多设置

笔记本电脑使用 Ifplugd

官方仓库 中的 ifplugd 是一个守护进程,当网络适配器插入的时候自动配置网络,当网络断开的时候自动取消配置(比如某些3G的usb网络适配器)。这对于笔记本电脑这样的使用移动式的网络适配器的情况很有用,因为他只会在网络实际接入的时候才会配置网络接口。另外一个可能会用得着它的情况是,你需要重启你的网络,可是你既不想重启电脑也不想在 shell 中配置。

在默认情况下,它会检查 eth0 设备。要更改这个设置(以及更改其他设置,比如等待时间),可以编辑 /etc/ifplugd/ifplugd.conf

启动 ifplugd 守护进程 并将它加入/etc/rc.confDAEMONS 列表,这样它就能在开机自动启动了。

另外,在 systemd 中,如果你已经安装了 netcfg,那么启用 net-auto-wired.service 就会在开机时启动 ifplugd,否则,你可以使用 ifplugd@eth0.service

绑定和链路聚合

你需要官方仓库中的netcfg包,以及AUR中的netcfg-bondingAUR包。

编辑/创建下列文件:

/etc/network.d/bonded
CONNECTION="bonding"
 INTERFACE="bond0"
 SLAVES="eth0 eth1"
 IP="dhcp"
 DHCP_TIMEOUT=10
/etc/rc.conf
MODULES=(... bonding ...)
...
 interface=bond0 #注释掉其它行(address,netmask,gateway,...)
...
 NETWORKS=(... bonded ...)
...
 DAEMONS=(... net-profiles ...) #替换 network
注意: 要改变绑定模式(默认值是轮循),例如,用于动态链路聚合:

创建 /etc/modprobe.d/bonding.conf

/etc/modprobe.d/bonding.conf
options bonding mode=4
options bonding miimon=100
更多关于不同绑定策略(以及其它驱动程序设置)的信息,参见 Linux Ethernet Bonding Driver HOWTO

为了启用新的绑定端口,需要载入bonding模块, 停止network并启动net-profiles服务:

# modprobe bonding
# rc.d stop network
# rc.d start net-profiles

查看状态和绑定模式:

$ cat /proc/net/bonding/bond0

IP 别名

IP 别名是指给同一个网络接口分配多个 IP 地址。这样一个网络节点可以有多个网络连接,每个实现不同的作用。

要使用 IP 别名,可以使用 netcfg ,修改 POST_UPPRE_DOWN命令手动创建额外的IP地址,详情参见 这里

示例

你需要使用官方仓库中的netcfg

准备配置文件

/etc/network.d/mynetwork
CONNECTION='ethernet'
DESCRIPTION='Five different addresses on the same NIC.'
INTERFACE='eth0'
IP='static'
ADDR='192.168.1.10'
GATEWAY='192.168.1.1'
DNS=('192.168.1.1')
DOMAIN=
POST_UP='x=0; for i in 11 12 13 14; do ip addr add 192.168.1.$i/24 brd 192.168.1.255 dev eth0 label eth0:$((x++)); done'
PRE_DOWN='for i in 11 12 13 14; do ip addr del 192.168.1.$i/24 dev eth0; done'
/etc/rc.conf
NETWORKS=(mynetwork)

...

DAEMONS=(... net-profiles ...)

更改 MAC/硬件地址

参见 MAC Address Spoofing

疑难排解

更换了连接cable modem的计算机

许多家庭有线电视的运营商(例如加拿大最大的有线电视公司Videotron,还有中国大陆的有线电视宽带公司)都使用记录网卡MAC地址的方法将cable modem配置为只能一台计算机使用。一旦cable modem获得第一台连接它的PC的MAC地址,就不会响应任何其它MAC地址。这样如果你换了台PC(或者路由器),由于新PC(或者路由器)的MAC地址和旧的不同,就没法连接cable modem了。这时候必须复位cable modem以使它重新辨认新的PC。 你得关闭cable modem电源,然后重新打开。一旦cable modem重启并再次登录在线完毕(指示灯熄灭),重启新连接的PC以使它发起一个DHCP请求,或者手动发起DHCP请求。

如果这个方法不能奏效,你需要克隆原来机器上的MAC地址。参见 Change MAC/hardware address

TCP窗口扩缩(window scaling)问题

TCP包头有个窗口(window)值表明其它主机可以发送多少数据回来。这个值只有16个bit,也就是说窗口打消最多只有64Kb。TCP包会被缓存一段时间(得被记录),如果内存限制(过去经常是)的话,主机很容易会用完内存。

回到1992年,内存逐渐增加,RFC 1323被发布以改善情况:窗口扩缩(Window Scaling)。所有包里的窗口值,可以被初始连接时定义的一个缩放因子(Scale Factor)所改变。

8-bit的缩放因子使得窗口可以是初始64Kb的32倍。

但是Internet上有些有问题的路由器和防火墙会将缩放因子重写为0,这导致主机之间产生误解。

Linux内核2.6.17引入了新的计算方式生成更高的缩放因子,间接的使得这些有问题的路由器和防火墙引发的后果更明显。

这导致连接缓慢甚至中断。

如何诊断问题

首先,我们要明白:这个问题很怪异。在某些案例中,你根本无法使用(HTTP, FTP, ...),而有时候,你可以连接某些主机(很少)。

当你碰到这个问题时,dmesg的输出正确,日志也没问题,ifconfig报告状态正常— 实际上一切都正常。

如果你无法浏览任何网站,不过你能ping通少部分主机,很可能你是遇到了这个问题。:ping使用ICMP协议所以不受TCP问题的影响。

你可以尝试使用WireShark。你也许会看到UDP和ICMP通讯成功,但是TCP通讯不成功(仅对外国主机)。

如何修复(糟糕的方法)

用比较糟糕的方法修复的话,你可以修改缩放因子计算所基于的tcp_rmem值。虽然它对大部分主机有效,但并不担保一定都有效,特别是某些很远的主机。

# echo "4096 87380 174760" > /proc/sys/net/ipv4/tcp_rmem

如何修复(好点的方法)

只需要禁止窗口缩放。虽然窗口缩放是个不错的TCP特性,但它也可能令人不安,特别是当你没法修改除了问题的路由器的时候。有几种方法可以禁止窗口缩放,而看来最可靠的(适用于大部分内核)将下面一行加入到你的{ic|/etc/sysctl.conf}}中 (见 sysctl

net.ipv4.tcp_window_scaling = 0

如何修复(最佳的方法)

这个问题是由有毛病的路由器/防火墙引致的,所以最好换了它。有些用户报告说那些有问题的路由是他们自己的DSL路由。

更多

本段内容是基于LWN文章TCP window scaling and broken routers和一个Kernel Trap 文章:Window Scaling on the Internet

在LKML上也有几篇相关的帖子。

Realtek 没有连接/网络唤醒问题

使用基于Realtek 8168 8169 8101 8111芯片网卡(独立网卡和板载)的用户也许会发现这个问题,启动时网卡不可用,网卡上的连接指示灯不亮。这通常会发生在安装了Windows的双启动系统上。在windows下使用realtek官方驱动(2007年5月后的版本)会引致这个问题。新驱动通过在Windows关机时禁止网卡来关闭网络唤醒功能,直到下一次Windows启动前网卡都会一直不可用。通过观察连接指示灯在Windows启动前一直熄灭,而Windows关机时也会熄灭,你可以发现这个问题。正常操作应该是只要系统一直开着,即使在POST加电过程中,连接指示灯也应该一直亮着的。这个问题也会影响其它没有安装新驱动的操作系统(例如Live CD等)。这里给出几种解决方案:

方法一 还原/变更Win驱动

你可以将你的Windows网卡驱动还原回Microsoft自带的驱动(如果有的话),或者安装2007年5月份以前的Realtek官方驱动(也许在网卡附带的CD上)。

方法二 启动Windows驱动里的网络唤醒功能

也许最好最快的修复方法就是改变Windows驱动里的这个设置。这个方法可以解决很多其它操作系统而不仅仅是Arch的麻烦。在Windows的设备管理器里,找到你的Realtek网卡,双击它。在“高级”标签页中,开启"wake-on-lan after shutdown"选项。

 例如在Windows XP里
 右键点击我的电脑-->管理-->设备管理器-->网络适配器-->双击 Realtek ... --> 高级标签页--> Wake-On-Lan After Shutdown --> 启用。
注意: 新的 Realtek Windows 驱动程序中(已测试了 2009/01/22 GIGABYTE 上的 Realtek 8111/8169 LAN Driver v5.708.1030.2008)可能与这里的选项稍微有点不同,像 Shutdown Wake-On-LAN --> Enable。似乎把它切换成 Disable 没有效果(你仍然可以在Windows关闭时看到连接指示灯熄灭)。一个比较不好的解决方法是引导 Windows,然后立即重启系统(执行非正常重启/关机),不给予 Windows 驱动程序关闭 LAN 的机会。连接指示灯将会保持亮着,网卡也会在 POST 之后保持可用 - 直到你再次进入 Windows 并正常关机。

方法三 更新Realtek Linux驱动

可以在realtek的官方网页上找到新的Linux驱动。(没有测试过,不过相信也能解决问题)。

方法四 在 BIOS/CMOS 中启用 LAN Boot ROM

尽管 Windows 驱动程序在系统关闭时禁用了它,但在 BIOS/CMOS 中设置 Integrated Peripherals --> Onboard LAN Boot ROM --> Enabled,系统启动时会重新激活 Realtek LAN 芯片。
这个方法多次在 GIGABYTE GA-G31M-ES2L 主板,2009/02/05 发布的 BIOS 版本 F8 上测试成功。YMMV。

DLink G604T/DLink G502T DNS 问题

使用 DLink G604T/DLink G502T 路由器和DHCP,并且固件是 v2.00+(通常是使用 AUS 固件)的用户可能会碰到的某些程序不同解析 DNS 的问题。不幸的是,pacman 就是这些程序其中之一。故障基本上是因为路由器在某些情况下不正确地发送 DNS 给 DHCP,导致程序尝试连接 IP 地址是 1.0.0.0 的服务器,然后因超时错误而失败。

如何诊断问题

最好的诊断问题方法是使用 Firefox/Konqueror/links/seamonkey,并启用 wget for pacman。如果问题发生在全新安装的 Arch Linux上,那么你可能要通过 live CD 来安装 links

首先,启用 wget for pacman(因为它给我们关于pacman下载软件包时的信息) 使用你喜欢的编辑器打开 /etc/pacman.conf 并取消下面这行的注释(如果前面有#的话,就移除它)

XferCommand=/usr/bin/wget --passive-ftp -c -O %o %u

当你编辑 /etc/pacman.conf 时,检查 pacman 用来下载软件包的默认镜像。

现在用网络浏览器打开默认镜像,检查镜像确实在工作。如果它很正常,那么运行 pacman -Syy (否则就选取另一个正常运行的镜像,并把它设置为 pacman 的默认镜像)。如果你看到类似于下面这样的信息(注意 1.0.0.0),

ftp://mirror.pacific.net.au/linux/archlinux/extra/os/i686/extra.db.tar.gz                                                            
            => '/var/lib/pacman/community.db.tar.gz.part'
Resolving mirror.pacific.net.au... 1.0.0.0

那么你很有可能有这个问题。 1.0.0.0 表示不能解析 DNS,因此我们必须把它添加到 /etc/resolv.conf中。

如何修复

基本上我们需要做的就是手动地在 /etc/resolv.conf 文件中添加 DNS 服务器。问题是 DHCP 会在启动时自动地删除和替换这个文件,所以我们需要编辑 /etc/conf.d/dhcpcd 并修改标志,阻止 DHCP 这么做。

当你打开 /etc/conf.d/dhcpcd,你应该看见类似下面的内容:

DHCPCD_ARGS="-t 30 -h $HOSTNAME"

在参数中添加 -R 参数,即,

DHCPCD_ARGS="-R -t 30 -h $HOSTNAME"
注意: 如果你使用的 dhcpcd >= 4.0.2,标志 -R 已被弃用。请参考 Dhcpcd 中关于怎样使用自定义的 /etc/resolv.conf 文件的信息。

保存并关闭文件;现在打开 /etc/resolv.conf。你应该看到一行 nameserver(最有可能是 10.1.1.1)。这是你的路由器的网关,我们需要连接它来获取你的 ISP 的 DNS 服务器。在你的浏览器地址栏中粘贴这个IP地址,并登录你的路由器。转到 DNS 部分,然后你将在 Primary DNS Server 一栏中看到一个 IP 地址;复制并粘贴它,作为一行 nameserver 放在现有网关那行的 上面

例如,/etc/resolv.conf 应该看上去是像这样的

nameserver 10.1.1.1

如果我的主 DNS 服务器是 211.29.132.12,那么修改 /etc/resolv.conf

nameserver 211.29.132.12
nameserver 10.1.1.1

现在执行 rc.d restart network 重启 network 守护进程并执行 pacman -Syy。如果它与服务器正常地同步了,那么问题就解决了。

更多

这是 whirlpool 论坛(Australian ISP community)中对这个问题的讨论并给出了相同的解决办法。

http://forums.whirlpool.net.au/forum-replies-archive.cfm/461625.html

检查 DHCP 问题先释放 IP 地址

当 DHCP 获得了错误的 IP 分配就可能产生这个问题。举例来说,当两个路由器通过VPN相连,通过VPN与我相连的路由器可能分配IP地址。要修复这个问题,在终端中以 root 权限释放 IP 地址:

# dhcpcd -k

然后请求一个新的地址:

# dhcpcd

可能你必须运行这两个命令好几次。