采用systemd-networkd管理网卡

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

[Match]

Name=eth0

[Network]

Address=192.168.10.111/

DNS=8.8.8.8

DNS=8.8.4.4

[Route]

Gateway=192.168.10.1

Metric=

动态配置时内容为:

[Match]

Name=eth0

[Network]

DHCP=yes

[DHCP]

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

[Match]

Name=wlan0

[Network]

DHCP=yes

[DHCP]

RouteMetric=

无线网卡的应用服务程序为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=

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=

network={

scan_ssid=

ssid="test"

psk=""

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=

CONNECT_POLL=

PING="."

CF_BASE=`basename $CONFIG`

PIDFILE="/var/run/$CF_BASE-pppoe.pid"

SYNCHRONOUS=no

CLAMPMSS=

LCP_INTERVAL=

LCP_FAILURE=

PPPOE_TIMEOUT=

FIREWALL=NONE

LINUX_PLUGIN=

PPPOE_EXTRA=""

PPPD_EXTRA=""

ETH="eth0"

USER="test"

# cat /etc/ppp/chap-secrets

"test"    *    ""

# cat /etc/ppp/pap-secrets

"test"    *    ""

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. static、dhcp、wifi、pppoe方式的切换操作步骤如下:

  1. 网络部分使用前部署

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

apt-get install wpasupplicant

systemctl enable wpa_supplicant

修改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=

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=

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=

之后执行如下命令:

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静态上网:

根据配置的IP、netmask、Gateway、DNS适当修改/etc/systemd/network/20-eth0.network内容。

[Match]

Name=eth0

[Network]

Address=192.168.10.111/

DNS=8.8.8.8

DNS=8.8.4.4

[Route]

Gateway=192.168.10.1

Metric=

之后执行如下命令:

 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) 无线上网:

根据ssid、psk、key_mgmt、pairwise合理修改/etc/wpa_supplicant.conf。

ctrl_interface=/var/run/wpa_supplicant

update_config=

network={

scan_ssid=

ssid="test"

psk=""

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

5)pppoe上网:

根据用户名和密码合理修改/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=

CONNECT_POLL=

PING="."

CF_BASE=`basename $CONFIG`

PIDFILE="/var/run/$CF_BASE-pppoe.pid"

SYNCHRONOUS=no

CLAMPMSS=

LCP_INTERVAL=

LCP_FAILURE=

PPPOE_TIMEOUT=

FIREWALL=NONE

LINUX_PLUGIN=

PPPOE_EXTRA=""

PPPD_EXTRA=""

ETH="eth0"

USER="test"

# cat /etc/ppp/chap-secrets

"test"    *    ""

# cat /etc/ppp/pap-secrets

"test"    *    ""

之后运行如下命令:

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下保存当前上网方式,可取值:static、dhcp、wifi、pppoe,在/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= while [ $num -lt ] do num=$(($num+)) pppoe-status | grep -w inet >/dev/null && { echo "pppoe success after $num *10s" num= } done sleep route del default ; route add default dev ppp0 ;; *) echo "not dhcp, static, pppoe or wifi" ;; esac exit
  1. 目前测试发现问题

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

参考:

  1. systemd
    的网络管理

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

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

  4. systemd-networkd
    (Archlinux wiki
    )

  5. Network
    configuration (Archlinux wiki)

  6. 5章
    网络设置(
    debian
    manuals)

systemd管理网络应用的更多相关文章

  1. CentOs7下systemd管理知识要点

    centOs7的一个巨大的变动就是用systemd取代了原来的System V init.systemd是一个完整的软件包,安装完成后有很多物理文件组成,大致分布为,配置文件位于/etc/system ...

  2. Ubuntu 18.04 使用Systemd管理MySQL 5.6

    转自:https://blog.csdn.net/skykingf/article/details/45225981 如何用Systemd管理 general 包安装的MySQL呢? 首先看看yum安 ...

  3. dockerd启动配置_修改IP和systemd管理

    docker采用CS架构,dockerd是管理后台进程,默认的配置文件为/etc/docker/daemon.json(--config-file可以指定非默认位置). 一个完整的daemon.jso ...

  4. linux任务计划 chkconfig工具 systemd管理服务 unit介绍 target介绍

    linux任务计划 任务计划:特定时间备份数据,重启服务,shell脚本,单独的命令等等. 任务计划配置文件:cat /etc/crontab [root@centos7 ~]# cat /etc/c ...

  5. 简述systemd的新特性及unit常见类型分析、使用systemd管理编译安装的nginx

    1. systemd新特性 并行处理(同时启动)所有服务. 基于依赖关系定义的服务控制逻辑 系统状态快照 按需激活进程,只有第一次被访问时才会真正启动: 2. systemd的常见unit类型 Ser ...

  6. linux任务计划cron、chkconfig工具、systemd管理服务、unit和target介绍

    第8周第1次课(5月14日) 课程内容: 10.23 linux任务计划cron10.24 chkconfig工具10.25 systemd管理服务10.26 unit介绍10.27 target介绍 ...

  7. Linux centos7 linux任务计划cron、chkconfig工具、systemd管理服务、unit介绍、 target介绍

    一.linux任务计划cron crontab -u  -e -l -r 格式;分 时 日 月 周 user command 文件/var/spool/corn/username 分范围0-59,时范 ...

  8. Linux 使用 Systemd 管理进程服务

    转载自:https://mp.weixin.qq.com/s/e-_PUNolUm22-Uy_ZjpuEA systemd 介绍 systemd是目前Linux系统上主要的系统守护进程管理工具,由于i ...

  9. systemd管理进程

    systemd很强大的管理工具,这里简单用来管理一个进程: [Unit]Description=Imges Compress Server [Service]Type=simpleExecStart= ...

随机推荐

  1. php file_get_contents读取大容量文件方法

      当我们遇到文本文件体积很大时,比如超过几十M甚至几百M几G的大文件,用记事本或者其它编辑器打开往往不能成功,因为他们都需要把文件内容全部放到内存里面,这时就会发生内存溢出而打开错误,遇到这种情况我 ...

  2. winform中键盘和鼠标事件的捕捉和重写

    在编写winform应用程序时,有时需要无论在哪个控件获取焦点时,对某一个键盘输入或者鼠标事件都进行同样的操作.比如编写一个处理图片的应用程序时,希望无论当前哪个控件获得焦点,当用户按上.下.左.右键 ...

  3. WinForm DataGridView新增加行

      1.不显示最下面的新行 通常 DataGridView 的最下面一行是用户新追加的行(行头显示 * ).如果不想让用户新追加行即不想显示该新行,可以将 DataGridView 对象的 Allow ...

  4. 7 款顶级的开源 Web 分析软件

    Web 分析无非就是 Web 流量的测量.但它并不限于测量网络流量,还包括: 分析 数据采集 为了了解和优化网页而上报网络数据 Google Analytics是最广泛使用的基于云的网络分析服务.不过 ...

  5. JavaScript权威指南第02章 词法结构

    词法结构 2.1字符集 JavaScript 是Unicode字符集编写,差点儿支持地球上全部的语言. 2.1.1区分大写和小写 javascript是区分大写和小写的语言. 2.1.2 空格.换行符 ...

  6. 近观ArcGIS 10.3.1

    ArcGIS 10.3.1公布了是有很多增强和改变.接下来我们重点内容一睹为快. 一.三维内容制作.公布及分享 ArcGIS 10.3.1能够实现三维内容制作.公布及分享.公布流程: 须要的软件环境 ...

  7. Atitit 图像处理类库安装与安装模式的前世今生与未来大趋势attilax总结.docx

    Atitit 图像处理类库安装与安装模式的前世今生与未来大趋势attilax总结.docx 1. 安装的原理,主要是解压,复制,设置三大步1 2. 目前我们常见的三大种安装模式,二进制模式与源码安装模 ...

  8. ios开发-引导页实现

    源码:http://files.cnblogs.com/ios8/%5Bcode4app.com%5DIntroductionTutorialView_10843.zip 可以看看demo,很简单,我 ...

  9. javascript 关于局部变量和全局变量

    js中函数运行过程不仅仅是单纯的局部变量覆盖全局变量.和函数里面的声明情况有关. 比方: <script> var a =1; function test(){ alert(a); //a ...

  10. bat批处理延迟运行脚本

    @echo off:aaapause 这里是你需要运行的程序for /l %%i in (0,1,10000) do echo %%i>nulgoto aaa 当然bat延迟运行还有其他的一些方 ...