• systemd管理网络应用


    采用systemd-networkd管理网卡

    1. 主网卡eth0的配置文件/etc/systemd/network/20-eth0.network,静态配置时内容示例如下:

    [Match]
    
    Name=eth0
    
    
    [Network]
    
    Address=192.168.10.111/24
    
    DNS=8.8.8.8
    
    DNS=8.8.4.4
    
    
    [Route]
    
    Gateway=192.168.10.1
    
    Metric=100

    动态配置时内容为:

    [Match]
    
    Name=eth0
    
    
    [Network]
    
    DHCP=yes
    
    
    [DHCP]
    
    RouteMetric=100
    1. 无线网卡的配置文件/etc/systemd/network/21-wireless.network,一般设置为动态IP即可,即该文件内容保持不变。

    [Match]
    
    Name=wlan0
    
    
    [Network]
    
    DHCP=yes
    
    
    [DHCP]
    
    RouteMetric=120

    无线网卡的应用服务程序为wpa_supplicant,其systemd配置文件为/lib/systemd/system/wpa_supplicant.service,内容如下,保持不变。

    [Unit]
    
    Description=WPA supplicant
    
    Before=network.target
    
    
    [Service]
    
    Type=simple
    
    ExecStart=/sbin/wpa_supplicant -Dnl80211 -iwlan0 -c /etc/wpa_supplicant.conf
    
    ExecReload=/sbin/wpa_supplicant -Dnl80211 -iwlan0 -c /etc/wpa_supplicant.conf
    
    RestartSec=120
    
    Restart=on-failure
    
    
    [Install]
    
    WantedBy=multi-user.target
    
    Alias=dbus-fi.epitest.hostap.WPASupplicant.service

    无线网卡上网方式的配置文件为/etc/wpa_supplicant.conf,样例如下:

    ctrl_interface=/var/run/wpa_supplicant
    
    update_config=1
    
    
    network={
    
    scan_ssid=1
    
    ssid="test"
    
    psk="123456"
    
    key_mgmt=WPA-PSK
    
    pairwise=CCMP
    
    }
    1. pppoe集成到systemd中,需配置文件/etc/ppp/pppoe.conf/etc/ppp/chap-secrets/etc/ppp/pap-secrets

    # cat /etc/ppp/pppoe.conf
    
    DEMAND=no
    
    DNSTYPE=SERVER
    
    PEERDNS=yes
    
    DEFAULTROUTE=yes
    
    CONNECT_TIMEOUT=30
    
    CONNECT_POLL=2
    
    PING="."
    
    
    CF_BASE=`basename $CONFIG`
    
    PIDFILE="/var/run/$CF_BASE-pppoe.pid"
    
    
    SYNCHRONOUS=no
    
    CLAMPMSS=1412
    
    
    LCP_INTERVAL=20
    
    LCP_FAILURE=3
    
    PPPOE_TIMEOUT=80
    
    
    FIREWALL=NONE
    
    LINUX_PLUGIN=
    
    PPPOE_EXTRA=""
    
    PPPD_EXTRA=""
    
    
    ETH="eth0"
    
    USER="test"
    
    # cat /etc/ppp/chap-secrets
    
    "test"    *    "123456"
    
    # cat /etc/ppp/pap-secrets
    
    "test"    *    "123456"

    systemd服务配置文件/lib/systemd/system/pppoe.service内容如下(保持不变)。

    # cat /lib/systemd/system/pppoe.service
    
    [Unit]
    
    Description=PPP over ethernet
    
    After=network-online.target systemd-networkd.service
    
    Wants=network-online.target systemd-networkd.service
    
    
    [Service]
    
    Type=forking
    
    ExecStart=/usr/sbin/pppoe-start
    
    ExecReload=/usr/sbin/pppoe-stop;/usr/sbin/pppoe-start
    
    ExecStop=-/usr/sbin/pppoe-stop
    
    ExecStopPost=-ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
    
    Restart=on-failure
    
    
    [Install]
    
    WantedBy=multi-user.target
    1. staticdhcpwifipppoe方式的切换操作步骤如下:

    1. 网络部分使用前部署

    需安装wpa_supplicant应用程序,并设置该应用开机启动。

    apt-get install wpasupplicant
    
    systemctl enable wpa_supplicant

    修改wpa_supplicantsystemd配置文件/lib/systemd/system/wpa_supplicant.service内容如下(内容保持不变):

    [Unit]
    
    Description=WPA supplicant
    
    Before=network.target
    
    
    [Service]
    
    Type=simple
    
    ExecStart=/sbin/wpa_supplicant -Dnl80211 -iwlan0 -c /etc/wpa_supplicant.conf
    
    ExecReload=/sbin/wpa_supplicant -Dnl80211 -iwlan0 -c /etc/wpa_supplicant.conf
    
    RestartSec=120
    
    Restart=on-failure
    
    
    [Install]
    
    WantedBy=multi-user.target
    
    Alias=dbus-fi.epitest.hostap.WPASupplicant.service

    增加无线网卡的配置文件/etc/systemd/network/21-wireless.network

    [Match]
    
    Name=wlan0
    
    
    [Network]
    
    DHCP=yes
    
    
    [DHCP]
    
    RouteMetric=120

    pppoe部分需要额外配置内核及安装pppoe且增加pppoe服务配置文件。

    Device Drivers ->

    Network device support ->

    <M> ppp(point-to-point protocol) support

    <M> PPP BSD-Compress compression

    <M> PPP Deflate compression

    [*] PPP filtering

    <M> PPP MPPE compression (encryption)

    [*] PPP multilink support

    <M> PPP over Ethernet

    <M> PPP support async serial ports

    <M> PPP support for sync tty ports

    pppoe安装及服务配置文件:

    # apt install pppoe
    
    # cat /lib/systemd/system/pppoe.service
    
    [Unit]
    
    Description=PPP over ethernet
    
    After=network-online.target systemd-networkd.service
    
    Wants=network-online.target systemd-networkd.service
    
    
    [Service]
    
    Type=forking
    
    ExecStart=/usr/sbin/pppoe-start
    
    ExecReload=/usr/sbin/pppoe-stop;/usr/sbin/pppoe-start
    
    ExecStop=-/usr/sbin/pppoe-stop
    
    ExecStopPost=-ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
    
    Restart=on-failure
    
    
    [Install]
    
    WantedBy=multi-user.target

    2) eth0动态上网:

    修改/etc/systemd/network/20-eth0.network内容为:

    [Match]
    
    Name=eth0
    
    
    [Network]
    
    DHCP=yes
    
    
    [DHCP]
    
    RouteMetric=100

    之后执行如下命令:

    systemctl stop pppoe
    
    systemctl restart systemd-networkd
    
    ifconfig wlan0 down
    
    systemctl restart systemd-resolved
    
    ls -al /etc/resolv.conf | grep systmed >/dev/null || ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf

    3) eth0静态上网:

    根据配置的IPnetmaskGatewayDNS适当修改/etc/systemd/network/20-eth0.network内容。

    [Match]
    
    Name=eth0
    
    
    [Network]
    
    Address=192.168.10.111/24
    
    DNS=8.8.8.8
    
    DNS=8.8.4.4
    
    
    [Route]
    
    Gateway=192.168.10.1
    
    Metric=100

    之后执行如下命令:

     systemctl stop pppoe
    
    systemctl restart systemd-networkd
    
    ifconfig wlan0 down
    
    systemctl restart systemd-resolved
    
    ls -al /etc/resolv.conf | grep systmed >/dev/null || ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf

    4) 无线上网:

    根据ssidpskkey_mgmtpairwise合理修改/etc/wpa_supplicant.conf

    ctrl_interface=/var/run/wpa_supplicant
    
    update_config=1
    
    
    network={
    
    scan_ssid=1
    
    ssid="test"
    
    psk="123456"
    
    key_mgmt=WPA-PSK
    
    pairwise=CCMP
    
    }

    之后执行如下命令:

    systemctl stop pppoe
    
    systemctl restart systemd-networkd
    
    systemctl restart wpa_supplicant
    
    ifconfig eth0 down
    
    systemctl restart systemd-resolved
    
    ls -al /etc/resolv.conf | grep systmed >/dev/null || ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf

    5pppoe上网:

    根据用户名和密码合理修改/etc/ppp/pppoe.conf/etc/ppp/chap-secrets/etc/ppp/pap-secrets,其中/etc/ppp/pppoe.conf只需要修改用户名及USER

    # cat /etc/ppp/pppoe.conf
    
    DEMAND=no
    
    DNSTYPE=SERVER
    
    PEERDNS=yes
    
    DEFAULTROUTE=yes
    
    CONNECT_TIMEOUT=30
    
    CONNECT_POLL=2
    
    PING="."
    
    
    CF_BASE=`basename $CONFIG`
    
    PIDFILE="/var/run/$CF_BASE-pppoe.pid"
    
    
    SYNCHRONOUS=no
    
    CLAMPMSS=1412
    
    
    LCP_INTERVAL=20
    
    LCP_FAILURE=3
    
    PPPOE_TIMEOUT=80
    
    
    FIREWALL=NONE
    
    LINUX_PLUGIN=
    
    PPPOE_EXTRA=""
    
    PPPD_EXTRA=""
    
    
    ETH="eth0"
    
    USER="test"
    
    # cat /etc/ppp/chap-secrets
    
    "test"    *    "123456"
    
    # cat /etc/ppp/pap-secrets
    
    "test"    *    "123456"

    之后运行如下命令:

    systemctl restart systemd-networkd
    
    ifconfig wlan0 down
    
    systemctl restart pppoe
    
    ifconfig eth0 0.0.0.0 && route del default; route add default dev ppp0
    1. 上网方式切换时间统计

    切换方式

    切换后成功连通时间

    static -> wifi

    8s

    dhcp -> wifi

    18s

    others

    5s

    注:不同网络环境或测试条件下,时间可能有差距。上述测试环境基于北京网络。

    1. 上网方式切换后网络连通的测试方法

      上网方式

      切换后连通测试方法

      static

      Ping网关

      dhcp

      可正确获取到动态分配的IP

      wifi

      可正确获取到动态分配的IP

      pppoe

      有虚拟网卡ppp0且可获取IP

    2. 开机启动时网络设计

    断电重启或reboot后,不同上网方式网卡配置和路由不同,需要根据上网方式来正确配置系统。

    /etc/wan_way下保存当前上网方式,可取值:staticdhcpwifipppoe,在/etc/rc.local中增加网络初始化脚本/usr/local/bin/init_networking后台执行,以配置不同上网方式的网络。

    #!/bin/sh
    wan_way
    =$(cat /etc/certusnet_conf/wan_way) case $wan_way in "dhcp" | "static" ) ifconfig wlan0 down ls -al /etc/resolv.conf | grep systmed >/dev/null || ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf echo "dhcp or static" ;; "wifi") ifconfig eth0 down ls -al /etc/resolv.conf | grep systmed >/dev/null || ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf echo "wifi" ;; "pppoe") ifconfig wlan0 down systemctl restart pppoe echo "pppoe" ifconfig eth0 0.0.0.0 num=0 while [ $num -lt 10 ] do num=$(($num+1)) pppoe-status | grep -w inet >/dev/null && { echo "pppoe success after $num *10s" num=100 } done sleep 10 route del default ; route add default dev ppp0 ;; *) echo "not dhcp, static, pppoe or wifi" ;; esac exit 0
    1. 目前测试发现问题

    采用DHCP方式上网,插拔网线时配置其他设备该网关动态IP,此网关不能获取新的IP


    参考:

    1. systemd 的网络管理

    2. 树莓派+1USB有线网卡+1USB无线网卡做路由器

    3. Linux From Scratch - Version 7.7-systemd 通用网络配置

    4. systemd-networkd (Archlinux wiki)

    5. Network configuration (Archlinux wiki)

    6. 5章 网络设置(debian manuals

  • 相关阅读:
    KY2成绩排序
    python 获取list中元素的索引
    pandas 读取指定一列数据
    python 删除列表中的第一位元素
    python 时间戳
    python 除法保留小数点后两位
    python 读取excel表格的一列数据并去重
    python中获取Excel表格sheet页整页内容
    IDEA创建spring boot项目
    servlet一些问题
  • 原文地址:https://www.cnblogs.com/embedded-linux/p/10540426.html
Copyright © 2020-2023  润新知