工作效率等于什么| 前列腺增大伴钙化是什么意思| 耳鸣脑鸣是什么原因引起的| 归脾丸和健脾丸有什么区别| 老鼠尿是什么颜色的| 女人吃秋葵有什么好处| 政协主席是什么级别| 牛肉含有什么营养成分| 高我是什么意思| 咽炎吃什么药| 腰疼是什么原因引起的男性| 石斛与什么搭配最好| 迦字五行属什么| 小孩几天不大便是什么原因怎么办| 次氯酸钠是什么| 眼睛有什么颜色| 中国的国服是什么服装| 36周岁属什么| casio手表是什么牌子| 打氨基酸点滴有什么好处和害处| 子宫内膜炎有什么症状| 维生素c补什么| 经期适合吃什么| kksk是什么意思| 老保是什么意思| 球镜是什么| 候和侯有什么区别| 1990年属马是什么命| 头发长得快是什么原因| 小候鸟是什么意思| 解暑喝什么| 2021属什么| s和m是什么意思| 产后腰疼是什么原因| 什么是1型和2型糖尿病| 三个大是什么字| 云南白药草长什么样| 吃什么能消除脂肪瘤| 同房出血什么原因| 舌头麻是什么原因| 尿糖1十是什么意思| 汗管瘤什么原因造成| 头晕在医院挂什么科| 南京的简称是什么| 女人有卧蚕代表什么| 5月28是什么星座| 宝宝为什么老是吐奶| 敏感是什么意思| 避免是什么意思| 肿瘤标志物是什么| 朝代表什么生肖| 鼻腔有臭味是什么原因| 为什么会做春梦| 仓鼠能吃什么水果| 颈椎压迫神经挂什么科| 什么水果上火| 米面是什么| 孕妇上火了吃什么降火最快| 静养是什么意思| 双相情感障碍什么意思| 易烊千玺是什么星座| 化疗期间吃什么| 合约机什么意思| 疣长什么样| 肌酸激酶什么意思| 惊弓之鸟是什么故事| 脚麻是什么病的前兆| 脑供血不足吃什么药最好| 嗓子总有痰吃什么药| 1870年是什么朝代| 杭州什么宽带好又便宜| 尿酸低是什么原因| 天热吃什么| 尤文氏肉瘤是什么病| 鸡是什么类| 黑豆有什么作用| 揪心是什么意思| 鲫鱼吃什么食物| 杏仁有什么功效和作用| 最贵的烟是什么牌子| bf是什么意思| 亲家是什么意思| 寒热错杂吃什么中成药| 什么是闭合性跌打损伤| 低压高吃什么中成药| 5月23日是什么星座| 聚乙二醇是什么| 梦见孩子被蛇咬是什么意思| 双恋是什么意思| 软坚散结是什么意思| 朴实无华是什么意思| 孤独终老什么意思| 为什么直系亲属不能输血| 手上长毛是什么原因| 买盘和卖盘是什么意思| 口腔溃疡什么药最管用| srpl是什么药| 长白班什么意思| 梦到妈妈怀孕什么预兆| 复方乙酰水杨酸片是什么药| 软绵绵的什么| 梦见筷子是什么预兆| 天外飞仙是什么意思| 舌系带长有什么影响吗| 蟋蟀是靠什么发声的| 外阴瘙痒用什么药好| 金命是什么意思| 珊瑚虫属于什么动物| 经常抠鼻子有什么危害| 西酞普兰为什么早晨吃| 歆字取名什么寓意| 单男是什么意思| 梦到孩子死了是什么征兆| 什么病不能吃西兰花| 食管息肉的症状是什么| 不胜感激是什么意思| 吃什么促进腺样体萎缩| 二月一号是什么星座| 四十岁月经量少是什么原因| 猫吃什么下奶最快最多| 布施什么意思| 中焦湿热吃什么中成药| 彼岸花什么时候开花| 活色生香的意思是什么| 时光荏苒岁月如梭是什么意思| 梦见自己吐血是什么征兆| 出汗发粘是什么原因| 数字2代表什么意思| 1975年属兔五行属什么| 哥文花园女装什么档次| 胆红素偏高是什么原因| 支原体感染用什么药| 馨是什么意思| 班草是什么意思| 咽隐窝在什么位置| 泥鳅吃什么饲料| 吃完就拉是什么原因| 小儿外科主要看什么病| 核糖是什么| 半年抛是什么意思| 9月10日是什么节日| 纵欲过度是什么意思| 饭铲头是什么蛇| 红豆杉是什么植物| 性激素是查什么| 骨头炖什么好吃| 什么人不建议吃海参| 诗五行属性是什么| 仲字五行属什么| 外阴瘙痒用什么药膏擦| 七个月宝宝能吃什么水果| 软肋是什么意思| 拿到offer是什么意思| 吃了羊肉不能吃什么| 对对子是什么意思| 脑袋进水什么意思| 五金是什么| 小肠气是什么症状| 洋葱与什么食物相克| 查高血压挂什么科| 阴道痒吃什么药| 胸口疼吃什么药| 腱鞘炎吃什么药好使| 臻字五行属什么的| 壬寅年五行属什么| 舌系带短有什么影响| 芈月传芈姝结局是什么| 长鸡眼是什么原因| 尿路感染是什么症状| 莫欺少年穷是什么意思| 燕子每年从什么方飞往什么方过冬| 树莓色是什么颜色| 奢望是什么意思| 感觉不到饿是什么原因| 八月十号是什么星座| 网球肘用什么膏药效果好| 维生素b补什么的| 治疗神经痛用什么药最有效| 高烧吃什么药| 民营企业和私营企业有什么区别| 市人大副主任什么级别| 肾结石吃什么药最好| 宜入宅是什么意思| 胸痛什么原因| 橙色五行属什么| 猪血不能和什么一起吃| 脚背发麻是什么原因引起的| 伪骨科是什么意思| 女孩叫兮兮是什么意思| 为什么十五的月亮十六圆| 身体有湿气有什么症状| 扬州有什么好玩的| 上海有什么好玩的地方适合小孩子| 比目鱼长什么样| 1977年属什么生肖| 体脂是什么意思| 武昌鱼是什么鱼| 低血糖喝什么饮料| 16岁是什么年华| 四月八日是什么星座| 大生化检查都包括什么项目| henry是什么意思| 什么水果糖分低| 腋下皮肤发黑是什么原因引起的| 老什么什么什么| 孕期脸上长痘痘是什么原因| 青色是什么样的颜色| 白内障有什么症状表现| 血糖偏低是什么原因引起的| 生孩子前要注意什么| 当医生学什么专业| 茄子炒什么好吃| 隐血十一是什么意思| 尿隐血3十是什么病| 人体缺硒会有什么症状| 摸底是什么意思| 阳痿有什么症状| 盆腔检查做什么检查| 点卯是什么意思| 韭菜不能和什么一起吃| 为什么会便血| 风湿关节炎吃什么药| 汾酒属于什么香型| 94年属什么| 杭州吃什么| 名存实亡是什么意思| 头疼耳鸣是什么原因引起的| 坐月子送什么礼物好| 樱桃泡酒有什么功效| brush是什么意思| 尿赤是什么意思| 别出心裁的裁是什么意思| 诺五行属什么| 幼儿急疹吃什么药| 故宫什么时候闭馆| 现在什么手机好用| 1994年属狗是什么命| 肺结节看什么科| 双十一从什么时候开始| 胆囊炎是什么| 回族不能吃什么| 血糖为什么会高| def是什么意思| 真实的印度是什么样的| 神话故事有什么| 什么样的人不能坐飞机| 肠衣是什么做的| 猪肉和什么菜搭配最好| 锁精环是什么| 挽尊什么意思| 肺部散在小结节是什么意思| 腹胀是什么感觉| 干咳喝什么止咳糖浆好| 广西狗肉节是什么时候| 四史指的是什么| 胃酸分泌过多是什么原因造成的| 什么水果糖分低| 电脑长期不关机有什么影响| 多囊为什么要吃避孕药| 捡到鹦鹉是什么预兆| 古代女子成年行什么礼| 愚孝什么意思| 1月29日是什么星座| 为什么榴莲那么贵| 百度
Jump to content

2017富豪榜:王健林超李嘉诚1亿美元 夺亚洲首富

From ArchWiki
百度 王国平指出,城市学智库要为新型城镇化提供重要智力支撑,以科学咨询支撑科学决策,以科学决策引领科学发展;加快推进城市治理体系和治理能力现代化;不断破解“城市病”,致力于解决人民日益增长的美好生活需要和不平衡不充分的发展之间的矛盾。

systemd-networkd is a system daemon that manages network configurations. It detects and configures network devices as they appear; it can also create virtual network devices. This service can be especially useful to set up complex network configurations for a container managed by systemd-nspawn or for virtual machines. It also works fine on simple connections.

Installation

Systemd is part of the default Arch installation and contains all needed files to operate a wired network. Wireless adapters, covered later in this article, can be set up by services, such as wpa_supplicant or iwd.

Required services and setup

To use systemd-networkd, start/enable systemd-networkd.service.

Note Each network interface should be managed by only one DHCP client or network manager, so it is advised to run only one DHCP client or network manager on the system. Find a list of the currently running services with systemctl --type=service and then stop or reconfigure those that conflict.

It is optional to also configure systemd-resolved, which is a network name resolution service to local applications, considering the following points:

  • It is important to understand how resolv.conf and systemd-resolved interact to properly configure the DNS that will be used, some explanations are provided in systemd-resolved.
  • systemd-resolved is required if DNS entries are specified in .network files.
  • systemd-resolved is also required to obtain DNS addresses from DHCP servers or IPv6 router advertisements.
    (by setting (DHCP= and/or IPv6AcceptRA= in the [Network] section, and UseDNS=yes (the default) in the corresponding section(s) [DHCPv4], [DHCPv6], [IPv6AcceptRA], see systemd.network(5)).
  • Note that systemd-resolved can also be used without systemd-networkd.

systemd-networkd-wait-online

Enabling systemd-networkd.service also enables systemd-networkd-wait-online.service, which is a oneshot system service that waits for the network to be configured. The latter has WantedBy=network-online.target, so it will be started only when network-online.target itself is enabled or pulled in by some other unit. See also systemd#Running services after the network is up.

By default, systemd-networkd-wait-online.service waits for all links managed by systemd-networkd to be fully configured or failed, and for at least one link to be online.

See systemd-networkd-wait-online(8) for details.

Multiple interfaces that are not connected all the time

For system with multiple network interfaces that are not expected to be connected all the time (e.g. if a dual-port Ethernet card, but only one cable plugged in), starting systemd-networkd-wait-online.service will fail after the default timeout of 2 minutes. This may cause an unwanted delay in the startup process. To change the behaviour to wait for any interface rather than all interfaces to become online, edit the service and add the --any parameter to the ExecStart line:

/etc/systemd/system/systemd-networkd-wait-online.service.d/wait-for-only-one-interface.conf
[Service]
ExecStart=
ExecStart=/usr/lib/systemd/systemd-networkd-wait-online --any

Alternatively, use systemd-networkd-wait-online@.service to wait for a specific interface. For example, to wait for enp1s0, disable systemd-networkd-wait-online.service and enable systemd-networkd-wait-online@enp1s0.service.

Tip If you know which interface might not be up all the time, you can use RequiredForOnline=no in the Link section of your .network configuration file instead. See systemd.network(5) § [LINK]_SECTION_OPTIONS.

Wait until network interfaces have a routable address

Per systemd-networkd-wait-online.service(8), "online means that the link's operational state is equal or higher than "degraded"." (see networkctl(1) for the definition of "degraded" and other operational statuses).

To prevent systemd-networkd-wait-online.service from exiting before network interfaces have a routable IP address (and thus having other services that require a working network connection starting too early), add RequiredForOnline=routable to the [Link] section in .network files:

[Link]
RequiredForOnline=routable

Configuration examples

All configurations in this section are stored as foo.network in /etc/systemd/network/. For a full listing of options and processing order, see #Configuration files and systemd.network(5).

systemd/udev automatically assigns predictable, stable network interface names for all local Ethernet, WLAN, and WWAN interfaces. Use networkctl list to list the devices on the system. If it is desired to divert from the automatic interface naming, see Network configuration#Change interface name for examples.

After making changes to a configuration file, restart systemd-networkd.service.

Note
  • The options specified in the configuration files are case sensitive.
  • In the examples below, enp1s0 is the wired adapter and wlp2s0 is the wireless adapter. These names can be different on different systems. See Network configuration#Network interfaces for checking your adapter names.
  • It is also possible to use a wildcard, e.g. Name=en* or Name=wl*.
  • Devices can also be matched by their type. E.g. Type=ether for Ethernet, Type=wlan for Wi-Fi and Type=wwan for WWAN.
  • Note that Type=ether will also match virtual Ethernet interfaces. To exclude them, use Type=ether in combination with Kind=!*.

systemd example network files

A quick way to enable a network interface is to use one of the provided .example files located in /usr/lib/systemd/network/. For instance, to enable Wi-Fi and Ethernet, you can create symbolic links to the example files:

# ln -s /usr/lib/systemd/network/80-wifi-station.network.example /etc/systemd/network/80-wifi-station.network
# ln -s /usr/lib/systemd/network/89-ethernet.network.example /etc/systemd/network/89-ethernet.network

You can use networkctl edit to add any additional custom configurations. For example, to enable Multicast DNS for the Wi-Fi interface:

# networkctl edit @wlan0 --drop-in mdns
[Network]
MulticastDNS=true

Replace wlan0 with your stable interface name or specify the full path instead. See networkctl(1).

Wired adapter using DHCP

/etc/systemd/network/20-wired.network
[Match]
Name=enp1s0

[Link]
RequiredForOnline=routable

[Network]
DHCP=yes

Wired adapter using a static IP

/etc/systemd/network/20-wired.network
[Match]
Name=enp1s0

[Network]
Address=10.1.10.9/24
Address=2001:db8:1234:5678::1/64
Gateway=10.1.10.1
Gateway=fe80::1
DNS=10.1.10.1
DNS=2001:db8:1122::3344:1

Address= can be used more than once to configure multiple IPv4 or IPv6 addresses. See #network files or systemd.network(5) for more options.

Wireless adapter

In order to connect to a wireless network with systemd-networkd, a wireless adapter configured with another application such as wpa_supplicant or iwd is required.

/etc/systemd/network/25-wireless.network
[Match]
Name=wlp2s0

[Link]
RequiredForOnline=routable

[Network]
DHCP=yes
IgnoreCarrierLoss=3s

If the wireless adapter has a static IP address, the configuration is the same (except for the interface name) as in a wired adapter.

Tip IgnoreCarrierLoss=3s ensures that systemd-networkd will not re-configure the interface (e.g., release and re-acquire a DHCP lease) for a short period (3 seconds in this example) while the wireless interface roams to another access point within the same wireless network (SSID), which translates to shorter downtime when roaming.

To authenticate to the wireless network, use e.g. wpa_supplicant or iwd.

Wired and wireless adapters on the same machine

This setup will enable a DHCP IP for both a wired and wireless connection making use of the metric directive to allow the kernel to decide on-the-fly which one to use. This way, no connection downtime is observed when the wired connection is unplugged.

The kernel's route metric (same as configured with ip) decides which route to use for outgoing packets, in cases when several match. This will be the case when both wireless and wired devices on the system have active connections. To break the tie, the kernel uses the metric. If one of the connections is terminated, the other automatically wins without there being a gap with nothing configured (ongoing transfers may still not deal with this nicely but that is at a different OSI layer).

systemd-networkd does not set per-interface-type default route metrics, so it needs to be configured manually:

Note The Metric option is for static routes while the RouteMetric option is for setups not using static routes. See systemd.network(5) for more details.
/etc/systemd/network/20-wired.network
[Match]
Name=enp1s0

[Link]
RequiredForOnline=routable

[Network]
DHCP=yes

[DHCPv4]
RouteMetric=100

[IPv6AcceptRA]
RouteMetric=100
/etc/systemd/network/25-wireless.network
[Match]
Name=wlp2s0

[Link]
RequiredForOnline=routable

[Network]
DHCP=yes

[DHCPv4]
RouteMetric=600

[IPv6AcceptRA]
RouteMetric=600

Configuration files

The global configuration file in /etc/systemd/networkd.conf may be used to override some defaults only. The main configuration is performed per network device. Configuration files are located in /usr/lib/systemd/network/, the volatile runtime network directory /run/systemd/network/ and the local administration network directory /etc/systemd/network/. Files in /etc/systemd/network/ have the highest priority.

There are three types of configuration files. They all use a format similar to systemd unit files.

  • .network files. They will apply a network configuration for a matching device
  • .netdev files. They will create a virtual network device for a matching environment
  • .link files. When a network device appears, udev will look for the first matching .link file

They all follow the same rules:

  • If all conditions in the [Match] section are matched, the profile will be activated
  • an empty [Match] section means the profile will apply in any case (can be compared to the * wildcard)
  • all configuration files are collectively sorted and processed in lexical order, regardless of the directory in which they live
  • files with identical name replace each other
Tip
  • Files in /etc/systemd/network/ override the corresponding system-supplied file in /usr/lib/systemd/network/. Optionally use a symlink to /dev/null to "mask" a system file.
  • systemd accepts the values 1, true, yes, on for a true boolean, and the values 0, false, no, off for a false boolean. See systemd.syntax(7).
  • systemd-networkd will alter routing tables also for other network software. If this is undesired, configure ManageForeignRoutingPolicyRules= in networkd.conf(5) accordingly. For example, see WireGuard#Connection lost after sleep using systemd-networkd.

network files

This article or section is being considered for removal.

These files are aimed at setting network configuration variables, especially for servers and containers.

.network files have the following sections: [Match], [Link], [Network], [Address], [Route], and [DHCPv4]. Below are commonly configured keys for each section. See systemd.network(5) for more information and examples.

[Match]

Parameter Description Accepted Values Default Value
Name= Match device names, e.g. en*. By prefixing with !, the list can be inverted. white-space separated device names with globs, logical negation (!)
MACAddress= Match MAC addresses, e.g. MACAddress=01:23:45:67:89:ab 00-11-22-33-44-55 AABB.CCDD.EEFF whitespace-separated MAC addresses in full colon-, hyphen- or dot-delimited hexadecimal
Host= Match the hostname or machine ID of the host. hostname string with globs, machine-id(5)
Virtualization= Check whether the system is executed in a virtualized environment. Virtualization=false will only match your host machine, while Virtualization=true matches any container or VM. It is possible to check for a specific virtualization type or implementation, or for a user namespace (with private-users). boolean, logical negation (!), type (vm, container), implementation (see systemd-detect-virt(1)), private-users

[Link]

Parameter Description Accepted Values Default Value
MACAddress= Assign a hardware address to the device. Useful for MAC address spoofing. full colon-, hyphen- or dot-delimited hexadecimal MAC addresses
MTUBytes= Maximum transmission unit in bytes to set for the device. Note that if IPv6 is enabled on the interface, and the MTU is chosen below 1280 (the minimum MTU for IPv6) it will automatically be increased to this value. Setting a larger MTU value (e.g. when using jumbo frames) can significantly speed up your network transfers integer (usual suffixes K, M, G, are supported and are understood to the base of 1024)
Multicast= allows the usage of multicast boolean ? not documented ?

[Network]

Parameter Description Accepted Values Default Value
DHCP= Controls DHCPv4 and/or DHCPv6 client support. boolean, ipv4, ipv6 no
DHCPServer= If enabled, a DHCPv4 server will be started. boolean no
MulticastDNS= Enables multicast DNS support. When set to resolve, only resolution is enabled, but not host or service registration and announcement. boolean, resolve false
DNSSEC= Controls DNSSEC DNS validation support on the link. When set to allow-downgrade, compatibility with non-DNSSEC capable networks is increased, by automatically turning off DNSSEC in this case. boolean, allow-downgrade false
DNS= Configure static DNS addresses. May be specified more than once. inet_pton(3)
Domains= A list of domains which should be resolved using the DNS servers on this link. systemd.network(5) § [NETWORK] SECTION OPTIONS domain name, optionally prefixed with a tilde (~)
IPv4Forwarding= and IPv6Forwarding= If enabled, incoming (IPv4 / IPv6) packets on this network interface will be forwarded to any other interfaces according to the routing table. This controls the net.ipv4/6.conf.INTERFACE.forwarding sysctl option of the network interface. See Internet sharing#Enable packet forwarding for details. boolean no
IPMasquerade= If enabled, packets forwarded from the network interface will appear as coming from the local host. Depending on the value, implies IPv6Forwarding=yes or IPv4Forwarding=yes. ipv4, ipv6, both, no no
IPv6PrivacyExtensions= Configures use of stateless temporary addresses that change over time (see RFC 4941). When prefer-public, enables the privacy extensions, but prefers public addresses over temporary addresses. When kernel, the kernel's default setting will be left in place. boolean, prefer-public, kernel no

[Address]

Parameter Description Accepted Values Default Value
Address= Specify this key more than once to configure several addresses. Mandatory unless DHCP is used. If the specified address is 0.0.0.0 (for IPv4) or :: (for IPv6), a new address range of the requested size is automatically allocated from a system-wide pool of unused ranges. static IPv4 or IPv6 address and its prefix length (see inet_pton(3))

[Route]

  • Gateway= this option is mandatory unless direct routing or DHCP is used
  • Destination= the destination prefix of the route, possibly followed by a slash and the prefix length
  • Metric= the priority of this route
  • Type= the type for the route
  • Table= the table identifier for the route
  • GatewayOnLink= if set to yes, the kernel does not have to check if the gateway is reachable directly by the current machine (i.e., attached to the local network). Can be used to solve some routing issues.

If Destination is not present in [Route] section, this section is treated as a default route.

Tip Put the Address= and Gateway= keys in the [Network] section as a short-hand if [Address] section contains only an Address key and [Route] section contains only a Gateway key.

[RoutingPolicyRule]

Standard routing algorithms usually take in account only the destination address when they have to choose to which gateway send a packet. But for more complex networks this is not enough.

The [RoutingPolicyRule] section allows you to specify additional rules that are applied only to those packages that match the specified conditions.

Here a non-exhaustive list of these matches:

  • TypeOfService= (matches) the Type of Service of the packet as an integer in the range 0..255;
  • From= the source address prefix;
  • To= the destination address prefix;
  • FirewallMark= the iptables firewall mark value;
  • IncomingInterface= the incoming device;
  • OutgoingInterface= the outgoing device;

Other options:

  • Type= the Routing Policy Database rule type;
  • Table= the routing table to use if the packet matches the rule;
  • Priority= the priority of this rule. Rules are evaluated in increasing order of priority, therefore lower priority rules are applied before others;
  • InvertRule= if set to true then the rule is inverted, that is it is applied to every package that doesn't satisfy at least one of the matches;
  • SuppressPrefixLength= the rule is suppressed if the prefix length is equal or less than the specified value;

[DHCPv4]

Parameter Description Accepted Values Default Value
UseDNS= controls whether the DNS servers advertised by the DHCP server are used boolean true
Anonymize= when true, the options sent to the DHCP server will follow the RFC:7844 (Anonymity Profiles for DHCP Clients) to minimize disclosure of identifying information boolean false
UseDomains= controls whether the domain name received from the DHCP server will be used as DNS search domain. If set to route, the domain name received from the DHCP server will be used for routing DNS queries only, but not for searching. This option can sometimes fix local name resolving when using systemd-resolved boolean, route false
IPv6OnlyMode= when true, the DHCP client will signal to the DHCP server that it supports IPv6-only operation (RFC:8925, IPv6-Only Preferred Option for DHCPv4). If the DHCPv4 server returns that option in its DHCP response, the client will abort the DHCP request, will not acquire an IPv4 address and will configure an IPv6-only network boolean true if IPv6 is enabled

[DHCPServer]

This is an example of a DHCP server configuration which works well with hostapd to create a wireless hotspot. IPMasquerade adds the firewall rules for NAT and implies IPv4Forwarding=yes to enable packet forwarding.

The factual accuracy of this article or section is disputed.

Reason: IPMasquerade=ipv4 does not add the rules for the filter table, they have to be added manually. See systemd-nspawn#Use a virtual Ethernet link. (Discuss in Talk:Systemd-networkd)
/etc/systemd/network/wlan0.network
[Match]
Name=wlan0

[Network]
Address=10.1.1.1/24
DHCPServer=true
IPMasquerade=ipv4

[DHCPServer]
PoolOffset=100
PoolSize=20
EmitDNS=yes
DNS=9.9.9.9

netdev files

This article or section is being considered for removal.

These files will create virtual network devices. They have two sections: [Match] and [NetDev]. Below are commonly configured keys for each section. See systemd.netdev(5) for more information and examples.

[Match] section

  • Host= the hostname
  • Virtualization= check if the system is running in a virtualized environment

[NetDev] section

Most common keys are:

  • Name= the interface name. mandatory
  • Kind= e.g. bridge, bond, vlan, veth, sit, etc. mandatory

Usage with containers

systemd-networkd can provide fully automatic configuration of networking for systemd-nspawn containers using private networking when it is used on the host system as well as inside the container. See systemd-nspawn#Networking for a comprehensive overview.

Tip Starting systemd-networkd.service is all that is needed on the host to provide the described network auto-configuration for containers which use the default virtual Ethernet link setup. The following is only needed for other private networking scenarios.

For the examples below,

  • we will limit the output of the ip a command to the concerned interfaces,
  • we assume the host is the main operating system running on real hardware and the container is the guest system,
  • all interface names and IP addresses are only examples.

Network bridge with DHCP

Bridge interface

First, create a virtual bridge interface with a .netdev unit file which tells systemd-networkd to create a device named br0 that functions as an Ethernet bridge.

/etc/systemd/network/25-br0.netdev
[NetDev]
Name=br0
Kind=bridge

Optionally add MACAddress=none to the NetDev section for the bridge to inherit MAC address from one of the bridged interfaces. This also requires a creation of 25-br0.link file.

Tip systemd-networkd assigns a MAC address generated based on the interface name and the machine ID to the bridge. This may cause connection issues, for example in case of routing based on MAC filtering. To circumvent such problems, assign a MAC address to your bridge, probably the same as your physical device, adding the line MACAddress=xx:xx:xx:xx:xx:xx in the NetDev section above.

Restart systemd-networkd.service to have systemd-networkd create the bridge.

To see the newly created bridge on the host and on the container, type:

$ ip a
3: br0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default 
    link/ether ae:bd:35:ea:0c:c9 brd ff:ff:ff:ff:ff:ff

Note that the interface br0 is listed but is still DOWN at this stage.

Bind Ethernet to bridge

The next step is to add a network interface to the newly created bridge. The configuration file of the bridge must be loaded before those of the bridged interfaces, so its configuration file should be alphanumerically prior to those. In the example below, we add any interface that matches the name en* into the bridge br0.

/etc/systemd/network/25-br0-en.network
[Match]
Name=en*

[Network]
Bridge=br0

The Ethernet interface must not have DHCP or an IP address associated, as the bridge requires an interface to bind to with no IP address.

Note Ensure that no other .network file attempts to match interfaces by Name=en*. Only the first file that matches an interface is applied.

Bridge network

Now that the bridge has been created and has been bound to an existing network interface, the IP configuration of the bridge interface must be specified. This is defined in a third .network file, the example below uses DHCP.

/etc/systemd/network/25-br0.network
[Match]
Name=br0

[Link]
RequiredForOnline=routable

[Network]
DHCP=yes

Inherit MAC address (optional)

For the bridge to inhering MAC address from one of the bridged interfaces, set MACAddress=none and MACAddressPolicy=none.

/etc/systemd/network/25-br0.netdev
[NetDev]
Name=br0
Kind=bridge
MACAddress=none
/etc/systemd/network/25-br0.link
[Match]
OriginalName=br0

[Link]
MACAddressPolicy=none


Configure the container

Use the --network-bridge=br0 option when starting the container. See systemd-nspawn#Use a network bridge for details.

Result

  • on host
$ ip a
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 14:da:e9:b5:7a:88 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.87/24 brd 192.168.1.255 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fe80::16da:e9ff:feb5:7a88/64 scope link 
       valid_lft forever preferred_lft forever
6: vb-MyContainer: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
    link/ether d2:7c:97:97:37:25 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::d07c:97ff:fe97:3725/64 scope link 
       valid_lft forever preferred_lft forever
  • on container
$ ip a
2: host0: <BROADCAST,MULTICAST,ALLMULTI,AUTOMEDIA,NOTRAILERS,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 5e:96:85:83:a8:5d brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.73/24 brd 192.168.1.255 scope global host0
       valid_lft forever preferred_lft forever
    inet6 fe80::5c96:85ff:fe83:a85d/64 scope link 
       valid_lft forever preferred_lft forever

Notice

  • we have now one IP address for br0 on the host, and one for host0 in the container
  • two new interfaces have appeared: vb-MyContainer in the host and host0 in the container. This comes as a result of the --network-bridge=br0 option as explained in systemd-nspawn#Use a network bridge for details.
  • the DHCP address on host0 comes from the system /usr/lib/systemd/network/80-container-host0.network file.
  • on host

This article or section is out of date.

Reason: brctl is deprecated, use bridge link. See Network bridge#With iproute2. (Discuss in Talk:Systemd-networkd)
$ brctl show
bridge name	bridge id		STP enabled	interfaces
br0		8000.14dae9b57a88	no		enp7s0
							vb-MyContainer

the above command output confirms we have a bridge with two interfaces binded to.

  • on host
$ ip route
default via 192.168.1.254 dev br0 
192.168.1.0/24 dev br0  proto kernel  scope link  src 192.168.1.87
  • on container
$ ip route
default via 192.168.1.254 dev host0 
192.168.1.0/24 dev host0  proto kernel  scope link  src 192.168.1.73

the above command outputs confirm we have activated br0 and host0 interfaces with an IP address and Gateway 192.168.1.254. The gateway address has been automatically grabbed by systemd-networkd.

Network bridge with static IP addresses

Setting a static IP address for each device can be helpful in case of deployed web services (e.g FTP, http, SSH). Each device will keep the same MAC address across reboots if your system /usr/lib/systemd/network/99-default.link file has the MACAddressPolicy=persistent option (it has by default). This setup routes any service on the gateway to the desired device.

The following configuration needs to be done for this setup:

  • on host

The configuration is very similar to the #Network bridge with DHCP section. First, a virtual bridge interface needs to be created and the main physical interface needs to be bound to it. This task can be accomplished with the following two files, with contents equal to those available in the DHCP section.

/etc/systemd/network/MyBridge.netdev
/etc/systemd/network/MyEth.network

Next, you need to configure the IP and DNS of the newly created virtual bridge interface. For example:

/etc/systemd/network/MyBridge.network
[Match]
Name=br0

[Network]
DNS=192.168.1.254
Address=192.168.1.87/24
Gateway=192.168.1.254
  • on container

To get configure a static IP address on the container, we need to override the system /usr/lib/systemd/network/80-container-host0.network file, which provides a DHCP configuration for the host0 network interface of the container. This can be done by placing the configuration into /etc/systemd/network/80-container-host0.network. For example:

/etc/systemd/network/80-container-host0.network
[Match]
Name=host0

[Network]
DNS=192.168.1.254
Address=192.168.1.94/24
Gateway=192.168.1.254

Make sure that systemd-networkd.service is enabled in the container.

MACVLAN bridge

For the host to be able to reach containers connected via MACVLAN, the host itself also needs to connect via MACVLAN and not directly to the underlying Ethernet network interface.

On the host, attach the underlying Ethernet network interface to MACVLAN and make sure it does not get assigned IP addresses. For example, using mv-0 as the MACVLAN interface name and with enp1s0 as the host's Ethernet interface:

/etc/systemd/network/30-enp1s0.network
[Match]
Name=enp1s0

[Link]
RequiredForOnline=carrier

[Network]
MACVLAN=mv-0
DHCP=no
IPv6AcceptRA=false
LinkLocalAddressing=no
MulticastDNS=false
LLMNR=false
Tip
  • RequiredForOnline=carrier prevents systemd-networkd-wait-online.service from waiting (and eventually failing) for the connection to acquire an IP address, which will never happen.
  • The underlying network interface does not necessarily need to be a physical Ethernet interface. For example, a MACVLAN bridge can be attached to a bond.

Create the MACVLAN bridge mv-0:

/etc/systemd/network/25-mv-0.netdev
[NetDev]
Name=mv-0
Kind=macvlan

[MACVLAN]
Mode=bridge

Configure the host's network connection on the MACVLAN bridge (mv-0). The following example uses DHCP, replace the options as necessary.

/etc/systemd/network/35-mv-0.network
[Match]
Name=mv-0

[Link]
RequiredForOnline=routable

[Network]
BindCarrier=enp1s0
DHCP=yes

For the container, attach a MACVLAN to the underlying Ethernet network interface (enp1s0 in the examples above). For example, in /etc/systemd/nspawn/container_name.nspawn specify:

[Network]
MACVLAN=enp1s0

For containers started from the command line, pass them the --network-macvlan=enp1s0 option.

In the container, the MACVLAN interface will have the name mv-underlying_interface_name (e.g. mv-enp1s0). Configure the network connection as necessary (just like in the host) by matching the interface name. For example, using DHCP:

/etc/systemd/network/30-mv-enp1s0.network
[Match]
Name=mv-enp1s0

[Link]
RequiredForOnline=routable

[Network]
DHCP=yes

Tips and tricks

Interface and desktop integration

systemd-networkd does not have a proper interactive graphical management interface. Still, some tools are available to either display or modify the current state of the network, receive notifications or interact with the wireless configuration:

  • networkctl provides a command-line shell interface to query or modify the network interface states. It is worth noting that in order to change only some aspects of an interface behavior, one is required to first edit one or more configuration files in /etc/systemd/network/.
  • When networkd is configured with wpa_supplicant, both wpa_cli and wpa_gui offer the ability to associate and configure WLAN interfaces dynamically.
  • The networkd-dispatcherAUR daemon allows executing scripts in response to network interface state changes, similar to NetworkManager-dispatcher.
  • The networkd-notify-gitAUR creates simple notification messages on interface changes.
  • As for the DNS resolver systemd-resolved, information about current DNS servers can be visualized with resolvectl status.

Configuring static IP or DHCP based on SSID (location)

Often there is a situation where your home wireless network uses DHCP and office wireless network uses static IP. This mixed setup can be configured as follows:

Note Number in the file name decides the order in which the files are processed. Users can [Match] based on SSID or BSSID or both.
/etc/systemd/network/24-wireless-office.network
# special configuration for office Wi-Fi network
[Match]
Name=wlp2s0
SSID=office_ap_name
#BSSID=aa:bb:cc:dd:ee:ff

[Network]
Address=10.1.10.9/24
Gateway=10.1.10.1
DNS=10.1.10.1
#DNS=8.8.8.8
/etc/systemd/network/25-wireless-dhcp.network
# use DHCP for any other Wi-Fi network
[Match]
Name=wlp2s0

[Link]
RequiredForOnline=routable

[Network]
DHCP=yes

Bonding a wired and wireless interface

See also Wireless bonding.

Bonding allows connection sharing through multiple interfaces, so if e.g. the wired interface is unplugged, the wireless is still connected and the network connectivity remains up seamlessly.

Create a bond interface. In this case the mode is active-backup, which means packets are routed through a secondary interface if the primary interface goes down.

/etc/systemd/network/30-bond0.netdev
[NetDev]
Name=bond0
Kind=bond

[Bond]
Mode=active-backup
PrimaryReselectPolicy=always
MIIMonitorSec=1s

Set the wired interface as the primary:

/etc/systemd/network/30-ethernet-bond0.network
[Match]
Name=enp0s25

[Network]
Bond=bond0
PrimarySlave=true

Set the wireless as the secondary:

/etc/systemd/network/30-wifi-bond0.network
[Match]
Name=wlan0

[Network]
Bond=bond0
Note When using MAC addresses in the [Match] section, use of PermanentMACAddress is recommended over MACAddress, see this upstream discussion.

Configure the bond interface just like a normal interface:

/etc/systemd/network/30-bond0.network
[Match]
Name=bond0

[Link]
RequiredForOnline=routable

[Network]
BindCarrier=enp0s25 wlan0
DHCP=yes

Now if the wired network is unplugged, the connection should remain through the wireless:

$ networkctl
IDX LINK    TYPE     OPERATIONAL      SETUP     
  1 lo      loopback carrier          unmanaged 
  2 enp0s25 ether    no-carrier       configured
  3 bond0   bond     degraded-carrier configured
  5 wlan0   wlan     enslaved         configured

4 links listed.

Speeding up TCP slow-start

On a higher bandwidth link with moderate latency (typically a home Internet connection that is above 10 Mbit/s) the default settings for the TCP Slow Start algorithm are somewhat conservative. This issue exhibits as downloads starting slowly and taking a number of seconds to speed up before they reach the connection's full bandwidth. It is particularly noticeable with a pacman upgrade, where each package downloaded starts off slowly and often finishes before it has reached the connection's full speed.

These settings can be adjusted to make TCP connections start with larger window sizes than the defaults, avoiding the time it takes for them to automatically increase on each new TCP connection[1]. While this will usually decrease performance on slow connections (or if the values are increased too far) due to having to retransmit a larger number of lost packets, they can substantially increase performance on connections with sufficient bandwidth.

It is important to benchmark before and after changing these values to ensure it is improving network speed and not reducing it. If you are not seeing downloads begin slowly and gradually speed up, then there is no need to change these values as they are already optimal for your connection speed. When benchmarking, be sure to test against both a high speed and low speed remote server to ensure you are not speeding up access to fast machines at the expense of making access to slow servers even slower.

To adjust these values, edit the .network file for the connection:

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

#[Network]
#Gateway=...  <-- Remove this if you have it, and put it in the Gateway= line below

[Route]
# This will apply to the gateway supplied via DHCP.  If you manually specify
# your gateway, put it here instead.
Gateway=_dhcp4

# The defaults for these values is 10.  They are a multiple of the MSS (1460 bytes).
InitialCongestionWindow=10
InitialAdvertisedReceiveWindow=10

The defaults of 10 work well for connections slower than 10 Mbit/s. For a 100 Mbit/s connection, a value of 30 works well. The manual page systemd.network(5) § [ROUTE] SECTION OPTIONS says a value of 100 is considered excessive.

If the sysctl setting net.ipv4.tcp_slow_start_after_idle is enabled then the connection will return to these initial settings after it has been idle for some time (and often a very small amount of time). If this setting is disabled then the connection will maintain a higher window if a larger one was negotiated during packet transfer. Regardless of the setting, each new TCP connection will begin with the Initial* settings set above.

The sysctl setting net.ipv4.tcp_congestion_control is not directly related to these values, as it controls how the congestion and receive windows are adjusted while a TCP link is active, and particularly when the path between the two hosts is congested and throughput must be reduced. The above Initial* values simply set the default window values selected for each new connection, before any congestion algorithm takes over and adjusts them as needed. Setting higher initial values simply shortcuts some negotiation while the congestion algorithm tries to find the optimum values (or, conversely, setting the wrong initial values adds additional negotiation time while the congestion algorithm works towards correcting them, slowing down each newly established TCP connection for a few seconds extra).

Prevent multiple default routes

systemd-networkd does not set per-interface-type default route metrics, i.e. they need to be configured manually when using multiple network devices. For example, the following ip route shows multiple default routes:

ip route
default via 10.30.1.1 dev eno2 proto dhcp src 10.30.1.15 metric 1024
default via 192.168.1.254 dev eno1 proto dhcp src 172.18.105.104 metric 1024

Since the same default metric value 1024 is assigned, there is a race condition which of both is chosen as default route. Since the eno2 device came up first, it is preferred and thus, access available via eno1 may be ignored.

To prevent the race condition, assign different RouteMetric= values for the devices. See #Wired and wireless adapters on the same machine for a corresponding example.

If instead one device should not provide a default route, the UseRoutes=false option can be used to ignore routes provides by the DHCP server. This may be useful, for example, if the device provides a connection to a single other machine.

Configuring a second static IP with its own MAC address on an existing interface

To make your computer appear as two completely separate devices to your router, you can create a virtual interface not just with a different IP but also with a different MAC address.

To achieve this, create a virtual interface (macvlan) on top of your physical interface with a unique MAC address:

/etc/systemd/network/25-eth210.netdev
[NetDev]
Name=eth210
Kind=macvlan
MACAddress=00:11:22:33:44:55

[MACVLAN]
Mode=bridge

Then add a network file as usual, using the same subnet and gateway, and avoiding the range of IP numbers used for DHCP if you configure a static IP. For example:

/etc/systemd/network/25-eth210.network
[Match]
Name=eth210

[Network]
Address=192.168.132.210/24
Gateway=192.168.132.1

[Route]
Destination=192.168.132.0/24
Metric=2

The macvlan interface route has metric 2. This ensures that traffic will prefer going through the main interface, since that (implicitly) has a default route with metric 1, unless specifically directed to use the macvlan interface.

Finally, add MACVLAN=eth210 to the [Network] section of the .network file of your main interface!

At this point, a fast way to make your router aware of the new MAC (and configure it to accept that MAC) you can for example run arping -I eth210 192.168.132.1 as root. After configuring your router for the "new device" you can test if the new interface has internet access with for example curl --interface 192.168.132.210 ifconfig.me that should then print your public IP number.

See also

老年人适合吃什么 排卵的时候有什么症状 什么样的男人值得托付终身 尿道炎看什么科室好 粘液阳性是什么意思
吐槽什么意思 什么颜色有助于睡眠 老头疼是什么原因导致的 白癜风是什么症状 只是当时已惘然是什么意思
se是什么元素 合加龙是什么字 爱吃甜食是缺乏什么 什么样的柳树 为什么减肥不掉秤
兵部尚书相当于现在的什么官 粉碎性骨折是什么意思 春宵一刻值千金是什么意思 羊羹是什么做的 上午十点到十一点是什么时辰
煲汤放什么药材补气血hcv8jop8ns2r.cn 红房子是什么hcv8jop7ns8r.cn 腻歪是什么意思hcv7jop5ns0r.cn 急性胃肠炎吃什么药hcv7jop7ns2r.cn 梦遗是啥意思是什么hcv8jop8ns0r.cn
每天早上喝一杯蜂蜜水有什么好处hcv9jop5ns7r.cn 百合不能和什么一起吃xjhesheng.com 你的生命有什么可能hcv9jop7ns0r.cn 强阳下降到什么程度开始排卵naasee.com 敲锣打鼓是什么生肖hcv8jop8ns8r.cn
左眼皮跳什么意思hcv7jop6ns4r.cn 破伤风是什么意思hanqikai.com 新生儿干呕是什么原因hcv9jop7ns1r.cn 中秋送什么hcv9jop4ns8r.cn 书的五行属性是什么hcv7jop6ns9r.cn
孕妇能吃什么水果hcv9jop8ns2r.cn 核心抗体阳性是什么意思hcv8jop4ns9r.cn 道听途说是什么意思hcv9jop1ns5r.cn 心脏早搏是什么意思hcv9jop2ns6r.cn 吃桃子有什么好处hcv8jop0ns8r.cn
百度