如何设置Ubuntu静态IP地址,确保网络连接稳定可靠?
- 内容介绍
- 文章标签
- 相关推荐
如何设置Ubuntu静态IP地址,确保网络连接稳定可靠?话说回来,
再看前言。为何要设置静态IP,
静态IP像是“永恒地址”,能够避免因DHCP租约到期或服务器重启而导致的IP变更 ,从而保证SSH 。Web服务等长期稳定访问 .但很多朋友会遇到一个典型痛点:即使把配置写好并保存 ,如果网线不处于“已连接”状态 ,程序仍然显示为“未获取到IP”,这让人非常头疼。接下来将一步步演示如何在Ubuntu程序中正确设置静态IP。解决这一痛点.
一、准备工作:确认网卡名称和物理链路状态
关键点提醒: <<<<<<<如果你忘记先检查network adapter是否被正确识别 ,后面所有操作都无意义。)>
$ ip a
enp3s0 UP ... inet ... er ... # <--这就是你的网卡名字 eth0 DOWN ... lo LOOPBACK ...
-
注意: 说起来,这里的
enp3s0怎么说呢,需要替换成你实际看到的 还有 虚拟 NIC 的名字
$ ifconfig -a # 查看所有接口信息
$ ping -c 4 8.8.8.8 # 测试外部互联性
$ nslookup google.com # 测试 DNS 分辨率
温馨提醒: 如果你已经修改了Netplan 配置文件但没有重新应用,那么即使重启程序也不会生效——这是另一个常见痛点!
$ sudo netplan apply # 生效新配置
$ sudo systemctl restart networking.service # 在旧版 ifupdown 下亦需重启
若出现错误信息 “Error while parsing file …”,请检查 YAML **缩进**,并确认所有冒号后留有一个空格.
- * 错误缩进会导致 Netplan 报错 "|||||||||||}^]�
- * 请确认该虚拟 NIC 已经通过 “Bridge” 模式获取正确子网.
- * 若本地有多条不同的「有线」或「Wi‑Fi」适配器。&s 'Manual'模式需要针对每条适配器分别进行设定.
二、使用 Netplan管理 Network Interface 的推荐方式}
NetPlan 是 Ubuntu 自 Xenial(≤ Xenial) 引入的一套声明式 Network 配置工具。按理说,它通过 YAML 文件来描述每个 NIC 的属性。如果您看到类似 01-network-manager-all.yaml」这样的文件名时,&s 'NetPlan'就是我们本节要操作的目标。“font-size
'font-family:'sans-serif;'class='example-code-block'>
yaml
network:
version: ② # 指定 NetPlan 的版本号
renderer:
name这方面,- 'networkd' # 推荐使用 systemd-networkd
#- 'NetworkManager' # 若使用 NM 需另行选择 'NetworkManager'
yaml
renderer:
networkd:
ens99这方面。dhcp-ipv4: no # ← 本章主要 – “disable DHCP”
addresses:
- '①.xxx.yyy.xxx/yy'
至于routes,- dst:
- default
via这方面,- '①.xxx.yyy.zzz'
nameservers:
addresses:
- '①.xxx.yyy.aaa'
- '①.xxx.yyy.bbb'
li * **YAML 对缩进极其敏感**:一定要用 **空格**,而且每层缩进一致;li * **界面名必需与实际保持一致**:如您在 `ip a``输出里看到的是 ens99`,则必须写成 ens99;否则 NetPlan 加载时会报错;li * **修改前请备份原始文件**,例如:
pre>
bash>
sudo cp /etc/netplan/01-network-manager-all.yaml ~/backup-netpolicy.yaml &
>
end>
end_pre>
li * **完成后立即执行** `sudo netplant apply`。若出现错误可以通过 `netplane try --debug ";``来安全回滚,
➤ �" rel='nofollow'>
⛔︎ 不要忘记保存,接下来运行 ``sudo netplant apply`。⛔︎ 若仍不能 ping 达外部地址,**
再看检查**。
• 是否已经把 dhcp‑ipv4 改为 no?
• 默认路由及 GW 是否匹配实际子段?• 防火墙(ufw/Iptables) 是否阻止了流量?
四、ifupdown – 匹配老旧 Ubuntu
<|end|tag|Section-header|
<|begin|classText|&textSection-headern;
三、ifupdown – 匹配老旧 Ubuntu
<|end|tag|
<|begin|class_Text。text。
编辑 /etc/network/interfaces
&预备的观点是。
-
打开该文件这方面,
bash sudo nano /etc/network/interfaces - 在文件末尾添加或替换下面内容:
bash auto eth0 // 接口开关位 ———— 必须写 yes/no;若放在其他位则会被忽略
iface eth0 inet static \ address ①.xxx.yyy.xxx \ netmask ②⑤⑤⑤ \ gateway ③xxx.yyy.zzz \ dns-nameservers ④.aaa.bbb.cc.dddd.eee.fff.ggg hhh.hhh.hhh.hhh // 预留第二个 DNS
* 注意如果还有其它已存在的 auto/iface 行且与当前 NIC 冲突,必须删除或注释掉以免产生双向冲突。
禁用 DHCP 功能
在上面所填入的 static 配置区域,必须明确写入:
bash
dhcp-no-proto‑inet ‑no‑yes // 对于 ifupdown 脚本来说,
但在实际操作中只需在第一个参数 static 前加上 no。例如:
iface eth0 inet static \ address ①.xxx.yyy.xxx \ // ← 本节主要 ———————— “static” netmask ②₵₵₵₵ \ // ← 本节主要 ———————— “netmask” gateway ③xxx.yyyy.zɑa \ // ← 本节主要 ———————— “gateway” dns-nameservers ④.aaa.bbb.cc.dddd.eee.fff.ggg hhh.hhh.hhh.hhh \ // ← 本节主要 ———————— “DNS”
重新开启服务使生效
bash sudo systemctl restart networking.service // 对于 ifupdown 超级管家来说,
验证结果
bash $ ip addr show dev eth0 | grep inet\ # 应显示类似:inet ①.xxx.yyy.xxx/yy scope global dynamic eth��tunic…\ $ ping -c 5 google.com\
$ nslookup google.com\
※ 常见错误
- “Network is unreachable”往往是因为物理链路未建立,请先检查: • Ernet 案板插头是否完整插好;• LED 指示灯是否亮起;• 若是在 VMware 虚拟机里确认虚拟交换机已分配至同一子段。
五、方式快速实现**
五之一、GNOME Settings GUI
打开右上角「Settings」→「Network」→选择「Connected」中的「Edit」→进入「IPv4」选项卡→「Method」切换到「Manual」→依次填入:
-
Address ▶︎ e.g.。
①.xxx.yyy.xxx -
Subnet Mask ▶︎ e.g.,
②⑤⑤⑤ -
Gateway ▶︎ e.g.,
③xxx.yyyy.zɑa -
DNS ▶︎ e.g.,
④.aaa.bbb.cc.dddd.eee.fff.hhh
完成后点击「Apply」。随后打开终端执行以下命令验证:
bash
$ ip addr show dev $ | grep inet\
$ ping -c 5 cloudflare.com\
$ nslookup cloudflare.com\
五之二、nmcli CLI
假设当前正在编辑名称为「Wired connection 1」:
bash
nmcli con mod "Wired connection 1" ipv4.addresses "+½ᴬ . xxx . yyyy . zzzz⁴⁴⁄₂₄"
nmcli con mod "Wired connection ¹" ipv৪.gateway "+½ᴬ . iiiii . jjj . kkk.k.k.k"
nmcli con mod "Wired connection ^" ipv۴.dns "+½ᴬ . lll.l.l.l.l lll.l.l.l.l"
nmcli con mod "Wired connection ^" ipv۴.method manual // 注意把 method 改为 manual。nmcli con up "**Wired connection^**" // 同上步骤执行 up,使得新参数生效。
| * | * *||||
| * * | ||||
| * ** | ||||
如何设置Ubuntu静态IP地址,确保网络连接稳定可靠?话说回来,
再看前言。为何要设置静态IP,
静态IP像是“永恒地址”,能够避免因DHCP租约到期或服务器重启而导致的IP变更 ,从而保证SSH 。Web服务等长期稳定访问 .但很多朋友会遇到一个典型痛点:即使把配置写好并保存 ,如果网线不处于“已连接”状态 ,程序仍然显示为“未获取到IP”,这让人非常头疼。接下来将一步步演示如何在Ubuntu程序中正确设置静态IP。解决这一痛点.
一、准备工作:确认网卡名称和物理链路状态
关键点提醒: <<<<<<<如果你忘记先检查network adapter是否被正确识别 ,后面所有操作都无意义。)>
$ ip a
enp3s0 UP ... inet ... er ... # <--这就是你的网卡名字 eth0 DOWN ... lo LOOPBACK ...
-
注意: 说起来,这里的
enp3s0怎么说呢,需要替换成你实际看到的 还有 虚拟 NIC 的名字
$ ifconfig -a # 查看所有接口信息
$ ping -c 4 8.8.8.8 # 测试外部互联性
$ nslookup google.com # 测试 DNS 分辨率
温馨提醒: 如果你已经修改了Netplan 配置文件但没有重新应用,那么即使重启程序也不会生效——这是另一个常见痛点!
$ sudo netplan apply # 生效新配置
$ sudo systemctl restart networking.service # 在旧版 ifupdown 下亦需重启
若出现错误信息 “Error while parsing file …”,请检查 YAML **缩进**,并确认所有冒号后留有一个空格.
- * 错误缩进会导致 Netplan 报错 "|||||||||||}^]�
- * 请确认该虚拟 NIC 已经通过 “Bridge” 模式获取正确子网.
- * 若本地有多条不同的「有线」或「Wi‑Fi」适配器。&s 'Manual'模式需要针对每条适配器分别进行设定.
二、使用 Netplan管理 Network Interface 的推荐方式}
NetPlan 是 Ubuntu 自 Xenial(≤ Xenial) 引入的一套声明式 Network 配置工具。按理说,它通过 YAML 文件来描述每个 NIC 的属性。如果您看到类似 01-network-manager-all.yaml」这样的文件名时,&s 'NetPlan'就是我们本节要操作的目标。“font-size
'font-family:'sans-serif;'class='example-code-block'>
yaml
network:
version: ② # 指定 NetPlan 的版本号
renderer:
name这方面,- 'networkd' # 推荐使用 systemd-networkd
#- 'NetworkManager' # 若使用 NM 需另行选择 'NetworkManager'
yaml
renderer:
networkd:
ens99这方面。dhcp-ipv4: no # ← 本章主要 – “disable DHCP”
addresses:
- '①.xxx.yyy.xxx/yy'
至于routes,- dst:
- default
via这方面,- '①.xxx.yyy.zzz'
nameservers:
addresses:
- '①.xxx.yyy.aaa'
- '①.xxx.yyy.bbb'
li * **YAML 对缩进极其敏感**:一定要用 **空格**,而且每层缩进一致;li * **界面名必需与实际保持一致**:如您在 `ip a``输出里看到的是 ens99`,则必须写成 ens99;否则 NetPlan 加载时会报错;li * **修改前请备份原始文件**,例如:
pre>
bash>
sudo cp /etc/netplan/01-network-manager-all.yaml ~/backup-netpolicy.yaml &
>
end>
end_pre>
li * **完成后立即执行** `sudo netplant apply`。若出现错误可以通过 `netplane try --debug ";``来安全回滚,
➤ �" rel='nofollow'>
⛔︎ 不要忘记保存,接下来运行 ``sudo netplant apply`。⛔︎ 若仍不能 ping 达外部地址,**
再看检查**。
• 是否已经把 dhcp‑ipv4 改为 no?
• 默认路由及 GW 是否匹配实际子段?• 防火墙(ufw/Iptables) 是否阻止了流量?
四、ifupdown – 匹配老旧 Ubuntu
<|end|tag|Section-header|
<|begin|classText|&textSection-headern;
三、ifupdown – 匹配老旧 Ubuntu
<|end|tag|
<|begin|class_Text。text。
编辑 /etc/network/interfaces
&预备的观点是。
-
打开该文件这方面,
bash sudo nano /etc/network/interfaces - 在文件末尾添加或替换下面内容:
bash auto eth0 // 接口开关位 ———— 必须写 yes/no;若放在其他位则会被忽略
iface eth0 inet static \ address ①.xxx.yyy.xxx \ netmask ②⑤⑤⑤ \ gateway ③xxx.yyy.zzz \ dns-nameservers ④.aaa.bbb.cc.dddd.eee.fff.ggg hhh.hhh.hhh.hhh // 预留第二个 DNS
* 注意如果还有其它已存在的 auto/iface 行且与当前 NIC 冲突,必须删除或注释掉以免产生双向冲突。
禁用 DHCP 功能
在上面所填入的 static 配置区域,必须明确写入:
bash
dhcp-no-proto‑inet ‑no‑yes // 对于 ifupdown 脚本来说,
但在实际操作中只需在第一个参数 static 前加上 no。例如:
iface eth0 inet static \ address ①.xxx.yyy.xxx \ // ← 本节主要 ———————— “static” netmask ②₵₵₵₵ \ // ← 本节主要 ———————— “netmask” gateway ③xxx.yyyy.zɑa \ // ← 本节主要 ———————— “gateway” dns-nameservers ④.aaa.bbb.cc.dddd.eee.fff.ggg hhh.hhh.hhh.hhh \ // ← 本节主要 ———————— “DNS”
重新开启服务使生效
bash sudo systemctl restart networking.service // 对于 ifupdown 超级管家来说,
验证结果
bash $ ip addr show dev eth0 | grep inet\ # 应显示类似:inet ①.xxx.yyy.xxx/yy scope global dynamic eth��tunic…\ $ ping -c 5 google.com\
$ nslookup google.com\
※ 常见错误
- “Network is unreachable”往往是因为物理链路未建立,请先检查: • Ernet 案板插头是否完整插好;• LED 指示灯是否亮起;• 若是在 VMware 虚拟机里确认虚拟交换机已分配至同一子段。
五、方式快速实现**
五之一、GNOME Settings GUI
打开右上角「Settings」→「Network」→选择「Connected」中的「Edit」→进入「IPv4」选项卡→「Method」切换到「Manual」→依次填入:
-
Address ▶︎ e.g.。
①.xxx.yyy.xxx -
Subnet Mask ▶︎ e.g.,
②⑤⑤⑤ -
Gateway ▶︎ e.g.,
③xxx.yyyy.zɑa -
DNS ▶︎ e.g.,
④.aaa.bbb.cc.dddd.eee.fff.hhh
完成后点击「Apply」。随后打开终端执行以下命令验证:
bash
$ ip addr show dev $ | grep inet\
$ ping -c 5 cloudflare.com\
$ nslookup cloudflare.com\
五之二、nmcli CLI
假设当前正在编辑名称为「Wired connection 1」:
bash
nmcli con mod "Wired connection 1" ipv4.addresses "+½ᴬ . xxx . yyyy . zzzz⁴⁴⁄₂₄"
nmcli con mod "Wired connection ¹" ipv৪.gateway "+½ᴬ . iiiii . jjj . kkk.k.k.k"
nmcli con mod "Wired connection ^" ipv۴.dns "+½ᴬ . lll.l.l.l.l lll.l.l.l.l"
nmcli con mod "Wired connection ^" ipv۴.method manual // 注意把 method 改为 manual。nmcli con up "**Wired connection^**" // 同上步骤执行 up,使得新参数生效。
| * | * *||||
| * * | ||||
| * ** | ||||

