.. _archlinux_config_ip:
==============================
arch linux配置IP(静态或动态)
==============================
在arch linux系统中,配置IP地址主要通过:
- ``netctl``
- :ref:`systemd_networkd`
.. note::
以下案例网络设备命名已经采用了 :ref:`udev_rename_nic` ,所以有线网络接口为 ``eth0`` / 无线网络接口 ``wlan0``
配置静态IP
==============
.. _netctl:
``netctl``
-------------------
``netctl`` 是用于控制systemd服务网络管理器的命令行工具,如果已经安装了 ``netctl`` 则有一些案例位于 ``/etc/netctl/examples/`` 目录下:
- ``ethernet-dhcp``
- ``ethernet-static``
首先通过 ``ip link`` 命令获得主机网卡接口名。在 :ref:`thinkpad_x220` 会显示如下:
- Intel 82579LM 千兆有线网卡: ``enp0s25``
- Intel Advanced-N 6205无线网卡: ``wlp3s0``
(可选)对于网络配置,如果识别的网卡命名不是默认约定的 ``eth0`` 和 ``wlan0`` 会带来一些困扰。所以,如果需要可以先采用 :ref:`udev_rename_nic` 。
.. note::
我在 :ref:`archlinux_on_thinkpad_x220_u_disk` 没有采用 ``netctl`` 而是采用 :ref:`systemd_networkd` ,所以这段只做记录
- 复制配置案例::
sudo cp /etc/netctl/examples/ethernet-static /etc/netctl/eth0
- 修订 ``/etc/netctl/eth0`` :
.. literalinclude:: archlinux_config_ip/netctl_eth0
:language: ini
:caption: /etc/netctl/eth0
- 激活每次自动启动::
sudo netctl enable eth0
- 最后启动网卡::
sudo netctl start eth0
- 既然是静态分配IP,我们可以关闭和禁止dhcp服务::
sudo systemctl stop dhcpcd
sudo systemctl disable dhcpcd
:ref:`systemd_networkd` 方法(推荐)
------------------------------------
使用 :ref:`systemd` 的 :ref:`systemd_networkd` 配置静态IP地址的方法更为通用
- 编辑创建一个网络profile: ``/etc/systemd/network/eth0.network`` :
.. literalinclude:: archlinux_config_ip/eth0.network
:language: ini
:caption: /etc/systemd/network/eth0.network
- 如果已经设置过 ``netctl`` 则需要停止并移除 ``netctl`` ,如果需要还可停止 ``dhcpcd`` ::
sudo systemctl disable netctl@eth0.service
sudo pacman -Rns netctl
sudo systemctl stop dhcpcd
sudo systemctl disable dhcpcd
- 启动并激活 :ref:`systemd_networkd` 和 :ref:`systemd_resolved` (需要这个服务来解析DNS):
.. literalinclude:: archlinux_config_ip/systemd-networkd-resolved
:language: ini
:caption: 激活 systemd-networkd 和 systemd-resolved
:ref:`networkmanager`
============================
目前主要的发行版都使用 :ref:`networkmanager` 来管理Desktop版本的网络,配套提供了 :ref:`nmcli` 和 :ref:`nmtui` 来方便管理配置。其中 :ref:`nmtui` 使用最为简单,完全和图形桌面管理工具类似。
使用 :ref:`nmtui` 配置静态IP地址,实际上就是生成一个 ``/etc/NetworkManager/system-connections`` 目录下以 ``.nmconnection`` 后缀的配置文件(文件名前缀可以任意字符串)。例如,可以将生成的 ``eth0.nmconnection`` 复制到其他服务器,简单修改就可以完成配置:
.. literalinclude:: archlinux_config_ip/eth0.nmconnection
:caption: ``/etc/NetworkManager/system-connections/eth0.nmconnection``
:ref:`wpa_supplicant`
==========================
- 安装 ``rfkill`` 和 ``wpa_supplicant`` ::
sudo pacman -S rfkill wpa_supplicant
- 检查网卡状态::
rfkill list
如果无线网卡状态是 ``Soft blocked`` 则启动它::
rfkill unblock wifi
- 配置office的无线 ``/etc/wpa_supplicant/wpa_supplicant.conf`` :
.. literalinclude:: ../ubuntu_linux/network/wpa_supplicant/wpa_supplicant-office.conf
:language: bash
:caption: /etc/wpa_supplicant/wpa_supplicant.conf
- 复制 ``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`` :
.. literalinclude:: archlinux_config_ip/dhclient.service
:language: bash
:caption: /etc/systemd/system/dhclient.service
- 然后激活服务::
sudo systemctl enable dhclient.service
- 注意,我的主机有2个接口,我的配置要求是:
- 有线网卡配置静态IP地址,并且提供DNS解析,但是取消掉默认网关(默认路由从无线网络)
- 无线网络使用DHCP获得IP,但是忽略掉DHCP分配的DNS(DNS采用有线网络内网的 :ref:`priv_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配置
参考
=======
- `How To Configure Static And Dynamic IP Address In Arch Linux `_
- `Linux Make Sure /etc/resolv.conf Never Get Updated By DHCP Client `_