跳过正文
  1. Index/

Arch系linux静态ip设置与固定

·339 字·2 分钟
Einsam
作者
Einsam
A little bit about you
  • 在arch系统的安装过程中,我因为个人的网络环境而有设置静态ip的需求,因而没有选用dhcpcd服务来获取动态ip

    在此记录设置静态ip过程中的思路与一些工具的使用,还有永久固定静态ip的方法


    前置知识
    #

    排查网络连接问题
    #

    1. 网络接口网卡设备可见且已经启用 
        1. ip link
        2. ip link set 网卡名 up
    2. 已经连接到网络. 网线已经接好 或者已经连接到无线局域网
    3. 网络接口设备拥有一个ip地址
    4. 路由表设置正确 
    6. 可以ping通一个本地ip地址 例如默认网关
    7. 可以ping通一个公网ip地址 例如8.8.8.8 谷歌的DNS服务器
    8. 检查是否能解析域名 例如baidu.com
    

    Ping
    #

    ping用于测试是否可以连接到某个主机

    $ ping www.example.com
    PING www.example.com (93.184.216.34): 56(84) data bytes
    64 bytes from 93.184.216.34: icmp_seq=0 ttl=56 time=11.632 ms
    64 bytes from 93.184.216.34: icmp_seq=1 ttl=56 time=11.726 ms
    64 bytes from 93.184.216.34: icmp_seq=2 ttl=56 time=10.683 ms
    ...
    

    如果没有收到回应,原因可能与你的默认网关配置或者你的网络接入服务商(ISP)有关。

    iproute2使用
    #

    iproute2base 元包 的依赖,提供 ip 命令行接口,用于管理 网络接口,IP 地址 和 路由表。注意使用 ip 进行的配置会在重启后丢失。要进行永久配置,可以使用 网络管理器 或通过脚本和 systemd 单元 使 ip 命令自动化。同时需要注意的是 ip 命令通常能够缩写,为了清楚起见,本文对其进行了详细说明。

    网络接口
    #

    默认情况下, udev 使用 可预测的网络接口名称 分配给你的网络接口,该名称以 en (有线/以太网) ,wl (无线/WLAN) 或 ww (WWAN) 。

    列出网络接口
    #

    有线和无线接口名称都可以通过 ls /sys/class/netip link 找到。要注意的是 lo 是 Loop 设备 ,不被用于建立网络连接。

    启用禁用网络接口
    #
    ip link set 'interface'网络接口名 up|down
    

    启用与禁用网络接口

    列出IP地址
    #
    ip address show
    
    将IP地址添加到接口
    #
    ip address add address地址/prefix_len子网掩码长度 broadcast 广播范围 + dev interface网络接口
    

    + 是使 ip 从 IP 地址和子网掩码派生 broadcast address 的特殊符号

    例如ip address add 192.168.3.18/24 broadcast 192.168.3.255 dev wlo1ip address add 192.168.3.18/24 broadcast + dev wlo1 address可缩写为addr 实际操作中省略广播貌似可行

    将IP地址从接口中删除
    #
    ip address del address/prefix_len dev interface
    

    删除某个特定接口的地址

    ip address flush dev interface
    
    列出路由表
    #

    列出IPV4路由

    ip route show
    

    列出IPV6路由

    ip -6 route
    
    添加路由表,即网关
    #
    ip route add PREFIX via address dev interface
    

    一般默认PREFIXdefault 例如

    ip route add default via 192.168.3.1 dev wlo1
    

    网关ip一般为网段.1网段.254

    删除路由表
    #
    ip route del PREFIX via address dev interface
    

    删除某接口所有路由表

    ip route flush dev wlo1
    

    现在我们正式开始设置静态ip

    手动设置静态IP地址
    #

    ip address add 192.168.3.18/24 broadcast 192.168.3.255 dev wlo1
    
    ip route add defalut via 192.168.3.254 dev wlo1
    

    编辑/etc/resolv.conf 添加DNS服务器

    nameserver 192.168.3.254
    

    也可改为一些公共dns


    永久固定ip
    #

    每次重启都得手动执行命令就显得有些麻烦。因此通过系统服务与脚本来固定ip地址

    首先先为systemd服务创建一个网络设定的配置 以网络接口设备名取代以下的interface

    vim /etc/conf.d/network@interface
    --------------------------------
    address=192.168.3.18
    netmask=24
    broadcast=192.168.3.255
    gateway=192.168.3.254
    

    具体ip与网关根据个人设置

    建立systemd unit档案

    vim /etc/systemd/system/network@.service
    ---------------------------------------
    [Unit]
    Description=Network connectivity (%i)
    Wants=network.target
    Before=network.target
    BindsTo=sys-subsystem-net-devices-%i.device
    After=sys-subsystem-net-devices-%i.device
    
    [Service]
    Type=oneshot
    RemainAfterExit=yes
    EnvironmentFile=/etc/conf.d/network@%i
    
    ExecStart=/usr/bin/ip link set dev %i up
    ExecStart=/usr/bin/ip addr add ${address}/${netmask} broadcast ${broadcast} dev %i
    ExecStart=/usr/bin/sh -c 'test -n ${gateway} && /usr/bin/ip route add default via ${gateway}'
    
    ExecStop=/usr/bin/ip addr flush dev %i
    ExecStop=/usr/bin/ip link set dev %i down
    
    [Install]
    WantedBy=multi-user.target
    

    启用该unit并将其启用,加入网络接口名称

    systemctl enable network@网络接口.service
    systemctl start network@网络接口.service
    

    至此结束