arch linux配置IP(静态或动态)

在arch linux系统中,配置IP地址主要通过:

备注

以下案例网络设备命名已经采用了 通过udev重命名网络设备名 ,所以有线网络接口为 eth0 / 无线网络接口 wlan0

配置静态IP

netctl 方法

netctl 是用于控制systemd服务网络管理器的命令行工具,如果已经安装了 netctl 则有一些案例位于 /etc/netctl/examples/ 目录下:

  • ethernet-dhcp

  • ethernet-static

首先通过 ip link 命令获得主机网卡接口名。在 ThinkPad X220笔记本 会显示如下:

  • Intel 82579LM 千兆有线网卡: enp0s25

  • Intel Advanced-N 6205无线网卡: wlp3s0

(可选)对于网络配置,如果识别的网卡命名不是默认约定的 eth0wlan0 会带来一些困扰。所以,如果需要可以先采用 通过udev重命名网络设备名

备注

我在 ThinkPad X220上运行Arch Linux(U盘) 没有采用 netctl 而是采用 Systemd Networkd服务 ,所以这段只做记录

  • 复制配置案例:

    sudo cp /etc/netctl/examples/ethernet-static /etc/netctl/eth0
    
  • 修订 /etc/netctl/eth0 :

/etc/netctl/eth0
Description='A basic static ethernet connection'
Interface=eth0
Connection=ethernet
IP=static
Address=('192.168.6.199/24')
Gateway=('192.168.6.200')
DNS=('192.168.6.200' '192.168.7.200')
  • 激活每次自动启动:

    sudo netctl enable eth0
    
  • 最后启动网卡:

    sudo netctl start eth0
    
  • 既然是静态分配IP,我们可以关闭和禁止dhcp服务:

    sudo systemctl stop dhcpcd
    sudo systemctl disable dhcpcd
    

Systemd Networkd服务 方法(推荐)

使用 Systemd进程管理器Systemd Networkd服务 配置静态IP地址的方法更为通用

  • 编辑创建一个网络profile: /etc/systemd/network/eth0.network :

/etc/systemd/network/eth0.network
[Match]
Name=eth0

[Network]
Address=192.168.6.199/24
Gateway=192.168.6.200
DNS=192.168.6.200
DNS=192.168.7.200
  • 如果已经设置过 netctl 则需要停止并移除 netctl ,如果需要还可停止 dhcpcd

    sudo systemctl disable netctl@eth0.service
    sudo pacman -Rns netctl
    sudo systemctl stop dhcpcd
    sudo systemctl disable dhcpcd
    
  • 启动并激活 Systemd Networkd服务systemd-resolved (需要这个服务来解析DNS):

激活 systemd-networkd 和 systemd-resolved
sudo systemctl enable systemd-networkd
sudo systemctl start systemd-networkd

sudo systemctl enable systemd-resolved
sudo systemctl start systemd-resolved

使用wpa_supplicant连接无线网络

  • 安装 rfkillwpa_supplicant

    sudo pacman -S rfkill wpa_supplicant
    
  • 检查网卡状态:

    rfkill list
    

如果无线网卡状态是 Soft blocked 则启动它:

rfkill unblock wifi
  • 配置office的无线 /etc/wpa_supplicant/wpa_supplicant.conf :

/etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
# 配置Country Code支持5G Hz无线连接
country=CN
# ap_scan支持扫描隐藏的SSID
ap_scan=1
network={
  ssid="SSID-OFFICE"
  key_mgmt=WPA-EAP
  eap=PEAP
  phase1="peaplabel=0"
  phase2="auth=MSCHAPV2"
  identity="user_name"
  password="user_password"
}
  • 复制 wpa_supplicant.service 配置:

    sudo cp /lib/systemd/system/wpa_supplicant.service /etc/systemd/system/wpa_supplicant.service
    
  • 修订 /etc/systemd/system/wpa_supplicant.service 指定接口:

    ExecStart=/sbin/wpa_supplicant -u -s -c /etc/wpa_supplicant/wpa_supplicant.conf -i wlan0
    
  • 激活 wpa_supplicant.service

    sudo systemctl enable wpa_supplicant.service
    
  • 安装 dhclient

    sudo pacman -S dhclient
    
  • 配置 /etc/systemd/system/dhclient.service :

/etc/systemd/system/dhclient.service
[Unit]
Description= DHCP Client
Before=network.target

[Service]
Type=simple
ExecStart=/sbin/dhclient wlan0 -v
#ExecStop=/sbin/dhclient wlan0 -r

[Install]
WantedBy=multi-user.target
  • 然后激活服务:

    sudo systemctl enable dhclient.service
    
  • 注意,我的主机有2个接口,我的配置要求是:

    • 有线网卡配置静态IP地址,并且提供DNS解析,但是取消掉默认网关(默认路由从无线网络)

    • 无线网络使用DHCP获得IP,但是忽略掉DHCP分配的DNS(DNS采用有线网络内网的 私有云DNS服务(dnsmasq)和共享因特网(ICS) )

这里需要配置 dhclient 但是忽略掉DHCP分配的DNS,通常方式是修订 /etc/dhcp/dhclient.conf ,设置和有线网卡静态IP地址一致的DNS配置:

supersede domain-name-servers 192.168.6.200;

不过,由于我使用了简化的 dhclient.service 配置,并没有指定配置文件,所以采用手工修订 /etc/resolv.conf ,然后执行以下命令将文件设置为不可修改:

chattr +i /etc/resolv.conf

这样就不会被DHCP错误修改DNS配置

参考