前文12分别就Cubieboard2双卡版的Archlinux系统安装及简单配置做了详细说明,这里就Cubieboard2/树莓派的网络配置做一些说明。

Archlinuxarm安装好之后默认是通过systemd-network服务进行联网的。如果是从比较老的arch系统镜像安装的话则是通过netctl进行管理的。我对新的systemd-network联网方式不熟,实际使用下来感觉没有netctl好使,稍微看了下systemd-network对于网络环境较为复杂的服务器环境有优势,但是那些特性在基于Cubieboard/树莓派的家用服务器则不太可能用的上,所以这里以netctl进行说明。

建议使用systemd-network配置网络!文件/etc/systemd/network/eth0.network内容如下:

[Match]
Name=eth0

[Network]
DNS=127.0.0.1
DNS=223.5.5.5
Address=219.228.12x.xx/24
Gateway=219.228.12x.xxx

DNS=2001:470:20::2
Address=2001:da8:8000:xxxx::5b21/64
Gateway=2001:da8:8000:xxxx::1

有线网络

dhcp方式

如果确定你的板子一直用dhcp方式联网的话,那么本文对你作用不大,你可以选择看看 Tag: cubieboard 其他文章,或者,猛戳浏览器右上角/左上角的叉叉图标…

如果你的板子所处网络环境较为复杂,建议使用netctl替代systemd-network管理网络。步骤如下:

  1. 禁止systemd-networkd开机启动:sudo systemctl disable systemd-networkd
  2. 拷贝netctldhcp配置文件:sudo cp /etc/netctl/examples/ethernet-dhcp /etc/netctl/
  3. 适当修改文件ethernet-dhcp中的网络接口名,确定是否和当前需要dhcp的网络接口名一致。
  4. 以太网口接入网线时启动dhcp服务,拔出网线时关闭相应网络接口:sudo systemctl enable netctl-ifplugd@eth0eth0为你的网卡名。

静态IP

这种联网方式相对较为复杂,往往还有些其它问题需要解决。

MAC地址克隆

以我交为例,研究生寝室每人一个端口,根据网卡的MAC绑定相应的静态IP(是全球可路由的噢~)。虽然可以通过SJTU-NIMO!学生宿舍网络信息系统在线申请MAC地址更换,但平白无故给网管添麻烦也挺损RP的 :( Arch的wiki上总结了若干种MAC地址欺骗的方法,这里我以systemd-udevd方法进行说明。树莓派可以在/boot/configxxx中配置,不必使用这种复杂的方式。

  1. 创建udevd规则文件:sudo vim /etc/udev/rules.d/75-net-fix-mac.rules
  2. 在文件75-net-fix-mac.rules中写入一行
ACTION=="add", SUBSYSTEM=="net", ATTR{address}=="02:03:09:82:4c:xx", RUN+="/usr/bin/ip link set dev %k address c8:0a:a9:1c:87:xx"

其中02:03:09:82:4c:xx为之前系统读到的MAC地址,c8:0a:a9:1c:87:xx则是你需要更改到的MAC地址。好了,下次开机时udev即可读到这条配置文件。

获取IPV6地址

目前大多数高校已支持IPV4/IPV6双栈运行,而且通过IPV6接入网络可以免流量,「免流量」对于大多数高校还是很有吸引力的!不过我交不对学生收取网络费用,嘛,流量是个什么玩意儿?≖‿≖✧

树莓派的/boot/cmdline.txt中有开启IPV6协议栈的选项,开启即可。Cubieboard2的Archlinux则默认开启,不必做多余配置。通过sudo dhcpcd eth0可以获取到临时的IPV6地址,如2001:da8:8000:xxxx::xxxx/128,记下这个地址。需要注意的是这里通过DHCPv6获取到的IPV6子网掩码为128位,没关系,设置静态IP时改为64即可~

启用静态IP

  1. 拷贝netctlstatic配置文件:sudo cp /etc/netctl/examples/ethernet-static /etc/netctl/
  2. 适当修改文件ethernet-static中的网络接口名,确定是否和当前需要dhcp的网络接口名一致。
  3. 修改静态IP配置,以我的Cubieboard2为例:
Description='A basic static ethernet connection'
Interface=eth0
Connection=ethernet
IP=static
Address=('219.228.xxx.60/24')
#Routes=('192.168.0.0/24 via 192.168.1.2')
Gateway='219.228.xxx.254'
DNS=('202.120.2.101')

## For IPv6 autoconfiguration
#IP6=stateless

## For IPv6 static address configuration
IP6=static
#Address6=('1234:5678:9abc:def::1/64' '1234:3456::123/96')
Address6=('2001:da8:8000:xxxx::671f/64')
#Routes6=('abcd::1234')
#Gateway6='1234:0:123::abcd'
Gateway6='2001:da8:8000:xxxx::1'

其中的xxx根据实际IP更改。

以太网口接入网线时启动静态IP,拔出网线时关闭相应网络接口:sudo systemctl enable netctl-ifplugd@eth0eth0为你的网卡名。

细心的你可能注意到了,假如目录/etc/netctl下存在多份配置文件如何破?对网络接口eth0启用netctl-ifplugd服务时,netctl会读取目录/etc/netctl的所有可用配置文件并尝试依次启动,直至成功为止。所以说刚开始配置系统时可以同时启用dhcpstatic以便调试,系统网络配置好之后即可将不需要的配置文件删除以加快开机时的联网速度。

以上均为针对以太网的联网方法,主要用到了netctl-ifplugd实现插拔网线的网络自动配置。如果你觉得我说的不够清楚,那么Arch的wiki是你的好去处-Network configuration - Wired(有线网络)

接下来就无线网络连接做一些简要说明。

无线网络

鉴于Cubieboard2/树莓派只提供最基本的硬件板,其他配件如电源、无线网卡等需要自己选购。对于无线网卡的选型,**建议选择Ralink家的芯片,千万不要去买Realtek的网卡。**究其原因则是由于Realtek的无线网卡对Linux极其不友好,在较新的Linux内核下驱动不了是常有的事。大量使用Ralink家芯片的厂商不多,我所知的像Comfast有大量基于Ralink的无线网卡出售,在某萌猫旗舰店上买时注意300Mb的通常是Realtek的芯片,150Mb的多为Ralink,各位看官买的时候务必擦亮你雪亮的眼睛!

首先安装进行无线网络连接所需的软件包,yaourt -S wpa_actiond wpa_supplicant dialog,安装好之后即可启用自动联网功能-sudo systemctl enable netctl-auto@wlan0

非IEEE 802.1x加密(即常见的WPA/WPA2等家用路由器上的加密方式)

首先使用sudo wifi-menu查看当前能搜索到的热点,输入密码后即在目录/etc/netctl下生成相应配置文件。下次启动时系统会从目录/etc/netctl读取可用的无线网络配置文件进行无线网络连接。

IEEE 802.1x/EAP

在学校这种场所,以我交为例,SSID为SJTU的热点部署在校园的每个角落,如实验室、体育馆、教室和图书馆等都有SJTU带来的电磁波。如果仍然使用wifi-menu的方式去联网,会发现无法连接。这是因为学校这种场所提供的是IEEE 802.1x加密方式,这里我们只能手动复制一份适用于IEEE 802.1x环境下的配置文件了。

添加配置文件,sudo vim /etc/netctl/wlan0-sjtu,下面贴出我在交大用的配置文件:

Description='A wireless connection using a custom network block configuration'
Interface=wlan0
Connection=wireless
Security=wpa-configsection
IP=dhcp
WPAConfigSection=(
    'ssid="SJTU"'
    'key_mgmt=WPA-EAP IEEE8021X'
    'eap=PEAP'
    'identity="username"'
    'password="password"'
)

wlan0替换为你的无线网卡名,usernamepassword分别替换为你的jaccount帐号密码。启动netctl-auto服务即可完成自动联网-sudo systemctl start netctl-auto@wlan0

关于Archlinux下无线网络的联网可参考 Wireless network configurationnetctl