在命令行为树莓派设置静态IP(更新)

九年吃菜粥 38.85m2021-04-201159 次点击1 人收藏1 人感谢
> 不是水文

# 初步操作

在外边租房子,房东提供无线网络,但玩树莓派时 IP地址 总是变,没法写进 hosts 里,很不爽

在命令行运行`ip addr`查看网卡信息,可以看到如下信息

```text
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether dc:a6:32:b2:f8:8b brd ff:ff:ff:ff:ff:ff
inet 192.168.0.10/24 brd 192.168.0.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::dea6:32ff:feb2:f88b/64 scope link
valid_lft forever preferred_lft forever
3: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
link/ether dc:a6:32:b2:f8:8c brd ff:ff:ff:ff:ff:ff
```

可以看到 1、2、3 这三个网卡,第二个是以太网,第三个是无线网,这里我想要把以太网的 IP 设置为静态,可以看到以太网的网卡名是 `eth0`

首先 `su`,以 root 用户执行

```shell
touch /etc/systemd/network/10-static-eth0.network
# eth0 是网卡名,如果你要改其他网卡,就把 eth0 换成你要换的网卡名
```

在该文件中写入如下内容:

```text
[Match]
Name=eth0

[Network]
Address=192.168.0.64/24
Gateway=192.168.0.1
DNS=119.29.29.29 182.254.116.116
```

> `Name` 就是网卡名
>
> `Address` 是静态 IP地址,最后斜杠后的数字 `24` 是子网掩码的长度,`24` 就相当于 `255.255.255.0`
>
> `Gateway` 是网关地址,就是你路由器的地址
>
> `DNS` 就不用说了,多个 DNS地址 用空格分开

写入文件后重启树莓派,如果**没有意外的话** IP地址 就改变了

# 出现问题

为什么上面说 **没有意外的话** 呢?因为的确可能出现意外😂

在 Manjaro 系统中(centos7 应该也是如此),有两个网络管理器,分别是 *NetworkManager* 和 *systemd-networkd*。

前者是在图形界面的网络管理器(也是默认的网络管理器),后者是系统底层的网络管理器(就先这么说吧),这两个网络管理器会起冲突,每次重连网络时,*NetworkManager* 会覆盖 *systemd-networkd* 的配置,而上述的配置方法配置的就是 *systemd-networkd*,这就会导致时而生效时而不生效(实测,大部分时候是不生效的)。

# 解决方案1:禁用 *NetworkManager*(不推荐)

第一个解决方案就是把 *NetworkManager* 给禁掉,这会导致**不能通过图形界面管理网络**,操作如下:

```shell
# 停用 NetworkManager
sudo systemctl stop NetworkManager
sudo systemctl disable NetworkManager
# 设置 systemd-networkd 开机自启
sudo systemctl restart systemd-networkd
sudo systemctl enable systemd-networkd
# 启动 systemd-resolved 服务,systemd-networkd用它来进行域名解析。
sudo systemctl enable systemd-resolved
sudo systemctl start systemd-resolved
```

> 不推荐的理由是:
>
> 1. 会导致**不能通过图形界面管理网络**
> 2. 明明 *NetworkManager* 这么好,被各个系统设置为默认网络管理器,为什么要禁用呢?
> 3. 停用 *NetworkManager* 很容易,停用完后再启用就麻烦了。如果你没有设置好就重启会导致无法获取IP,如果你没有屏幕基本上只能重装系统了

# 解决方案2:设置 *NetworkManager*

在命令行输入 `nmtui`

![bebf3c6b213ab2e3331dcce04f189bba.png](https://ppmm.org/images/2021/04/20/bebf3c6b213ab2e3331dcce04f189bba.png)

随后

![a897c83b2541116e2586d543615d82db.png](https://ppmm.org/images/2021/04/20/a897c83b2541116e2586d543615d82db.png)

这么简单就搞定了,还去改不知道能不能生效的配置文件

**我是傻逼**

> 如果你的系统里没有 *NetworkManager* 服务,那就得用 *解决方案1* 了
>
> 或者,[改用 Manjaro](https://talk.quwj.com/topic/2252) 或 Arch Linux 系的系统,真的好用
收藏 ♥ 感谢
暂无回复

登录注册 后可回复。




› 相关内容关注微信公众号