问题

Linux怎么配IP?

回答
Linux 设置 IP 地址,这事儿说起来一点都不神秘,其实就是给你的电脑在网络上起个名字和地址,让它能和其他设备“说话”。网上冲浪、文件共享、远程登录,这一切都离不开 IP。怎么配?我给你掰开了揉碎了说。

咱们先分两种大情况讲:一种是临时配(重启就丢了),另一种是永久配(一直有效)。

一、临时配 IP(简单粗暴,适合测试)

这招最快,通常用在一些临时性的测试或者快速调试的时候。

1. 使用 `ip` 命令 (推荐方式)

这是目前比较新的、也是推荐的方式。它比老旧的 `ifconfig` 要强大不少。

查看当前 IP 地址:

```bash
ip addr show
或者更简洁一点:
ip a
```

运行后,你会看到一堆信息,找到你的网卡名字(比如 `eth0`、`ens33` 等),然后在下面就能看到 `inet` 后面跟着的就是 IP 地址了。

给网卡配置 IP 地址、子网掩码和网关:

假设我们要给网卡 `eth0` 配置 IP `192.168.1.100`,子网掩码是 `255.255.255.0` (这个用 `/24` 来表示更方便,表示前 24 位是网络位),网关是 `192.168.1.1`。

```bash
配置 IP 和子网掩码
sudo ip addr add 192.168.1.100/24 dev eth0

启用网卡(有些情况下需要)
sudo ip link set eth0 up

配置网关
sudo ip route add default via 192.168.1.1
```

`sudo` 是因为修改网络配置需要管理员权限。
`ip addr add ... dev eth0`:给 `eth0` 这个网卡添加 `192.168.1.100/24` 这个 IP 地址。
`ip link set eth0 up`:确保 `eth0` 这个网卡是启动状态,能正常工作。
`ip route add default via 192.168.1.1`:告诉系统,去往任何不在本地网络的地址,都通过 `192.168.1.1` 这个网关出去。

删除已有的 IP 地址:

如果你想撤销刚才的配置,可以这样做:

```bash
sudo ip addr del 192.168.1.100/24 dev eth0
sudo ip route del default via 192.168.1.1
```

2. 使用 `ifconfig` 命令 (老派做法)

虽然现在不那么主流了,但在一些老系统或者特定场景下你可能还会遇到。

查看当前 IP 地址:

```bash
ifconfig
```

给网卡配置 IP 地址、子网掩码和网关:

假设给 `eth0` 配置 IP `192.168.1.100`,子网掩码 `255.255.255.0`,网关 `192.168.1.1`。

```bash
禁用网卡(先关闭,再改比较稳妥)
sudo ifconfig eth0 down

配置 IP 和子网掩码
sudo ifconfig eth0 192.168.1.100 netmask 255.255.255.0

启用网卡
sudo ifconfig eth0 up

配置网关(注意,这里是通过 route 命令)
sudo route add default gw 192.168.1.1
```

`ifconfig eth0 down` 和 `ifconfig eth0 up` 是用来开关网卡的。
`ifconfig eth0 192.168.1.100 netmask 255.255.255.0` 直接把 IP 和掩码设置上了。
`route add default gw 192.168.1.1` 配置网关。

重要提示: 以上这两种临时配置的方式,一旦服务器重启,这些设置就全没了。下次开机,它又会回到之前的状态,或者等待 DHCP 来分配 IP。

二、永久配置 IP (让电脑记住自己的地址)

这才是我们平时最常做的,让电脑每次开机都能自动获得正确的 IP 地址。这部分操作因为 Linux 发行版不同,配置文件的位置和格式会有点区别,我主要讲讲目前比较常见的几种方式。

1. 基于 `systemdnetworkd` 的方式 (现代主流)

很多新版本的 Linux 发行版(如 Ubuntu 18.04+、CentOS/RHEL 8+、Debian 9+)都转向了 `systemdnetworkd` 来管理网络。

配置文件位置: 主要在 `/etc/systemd/network/` 目录下,文件通常以 `.network` 结尾。

创建配置文件: 我们需要创建一个 `.network` 文件来描述你的网卡配置。比如,给网卡 `eth0` 配置静态 IP:

```bash
创建一个名为 20eth0.network 的文件 (数字是优先级,数字小的先加载)
sudo nano /etc/systemd/network/20eth0.network
```

在 `nano` 编辑器里,输入以下内容(根据你的实际情况修改 IP、网关等):

```ini
[Match]
Name=eth0 这里写你的网卡名称,比如 ens33、enp0s3 等

[Network]
Address=192.168.1.100/24
Gateway=192.168.1.1
DNS=8.8.8.8 可以配置多个DNS服务器,用空格隔开
DNS=1.1.1.1
```

`[Match]` 部分告诉系统这个配置是给哪个网卡用的 (`Name=eth0`)。
`[Network]` 部分是关键:
`Address=192.168.1.100/24`:设置 IP 和子网掩码。
`Gateway=192.168.1.1`:设置默认网关。
`DNS=...`:设置 DNS 服务器,用于解析域名。

启用 `systemdnetworkd` 服务:

```bash
启动并设置为开机自启
sudo systemctl enable systemdnetworkd
sudo systemctl start systemdnetworkd

重启网络服务以应用配置
sudo systemctl restart systemdnetworkd
```

如果你原来是用 NetworkManager 管理网络,可能会和 `systemdnetworkd` 有冲突。通常需要禁用 NetworkManager。

```bash
禁用 NetworkManager
sudo systemctl disable NetworkManager
sudo systemctl stop NetworkManager
```

2. 基于 `NetworkManager` 的方式 (GUI 和 CLI 都很常见)

像 Ubuntu Desktop、Fedora、CentOS/RHEL 7 这样的发行版,常常使用 `NetworkManager` 来管理网络,因为它既支持图形界面,也有强大的命令行工具 `nmcli`。

使用 `nmcli` 配置:

这是最常用的命令行方式。

首先,找到你的连接名称。通常是网卡名字,但也可能是一个默认名称。

```bash
nmcli connection show
```

假设你的连接名字是 `Wired connection 1`,网卡是 `eth0`。

配置静态 IP:

```bash
设置连接为手动模式
sudo nmcli connection modify "Wired connection 1" ipv4.method manual
设置 IP 地址和子网掩码
sudo nmcli connection modify "Wired connection 1" ipv4.addresses 192.168.1.100/24
设置网关
sudo nmcli connection modify "Wired connection 1" ipv4.gateway 192.168.1.1
设置 DNS 服务器
sudo nmcli connection modify "Wired connection 1" ipv4.dns "8.8.8.8,1.1.1.1"
应用配置
sudo nmcli connection up "Wired connection 1"
```

配置 DHCP (自动获取 IP):

如果你想让电脑通过 DHCP 服务器自动获取 IP,只需要把 `ipv4.method` 设置为 `auto`:

```bash
sudo nmcli connection modify "Wired connection 1" ipv4.method auto
sudo nmcli connection up "Wired connection 1"
```

配置 DNS: 即使是 DHCP 分配的 IP,你也可以手动指定 DNS 服务器。

```bash
sudo nmcli connection modify "Wired connection 1" ipv4.dns "8.8.8.8,1.1.1.1"
sudo nmcli connection up "Wired connection 1"
```

3. 直接修改配置文件 (经典方法,但容易出错)

在一些较老的系统,或者你更喜欢直接编辑文件的场景下,可以这样做。但这个方法需要非常小心,一个错别字就可能导致网络不通。

Debian/Ubuntu 系列 (使用 `/etc/network/interfaces`)

这个是传统的配置方式,在较新的 Ubuntu 版本里可能被 `netplan` 取代了。

编辑文件:

```bash
sudo nano /etc/network/interfaces
```

添加或修改内容。例如,给 `eth0` 配置静态 IP:

```
The loopback network device
auto lo
iface lo inet loopback

The primary network interface
auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
dnsnameservers 8.8.8.8 1.1.1.1
```

`auto eth0`:表示系统启动时自动激活 `eth0`。
`iface eth0 inet static`:说明 `eth0` 使用静态 IP。
`address`:IP 地址。
`netmask`:子网掩码。
`gateway`:网关。
`dnsnameservers`:DNS 服务器地址。

修改完后,应用配置:

```bash
重启网络服务 (不同发行版命令可能不同)
sudo systemctl restart networking
或者直接重启网卡
sudo ifdown eth0 && sudo ifup eth0
```

CentOS/RHEL 系列 (使用 `/etc/sysconfig/networkscripts/ifcfg...`)

这是 CentOS/RHEL 系(包括 Fedora 早期)的传统配置方式。

编辑对应网卡的配置文件,通常是 `/etc/sysconfig/networkscripts/ifcfgeth0` (或 `ifcfgens33` 等)。

```bash
sudo nano /etc/sysconfig/networkscripts/ifcfgeth0
```

修改内容如下:

```
TYPE=Ethernet
BOOTPROTO=static 设为 static 表示静态IP, dhcp 表示自动获取
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eth0 网卡名称
UUID=<网卡的UUID,一般不需要手动改>
DEVICE=eth0 网卡名称
ONBOOT=yes 开机自动启动
IPADDR=192.168.1.100
PREFIX=24 子网掩码,也可以写 NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=1.1.1.1
```

修改完后,重启网络服务:

```bash
sudo systemctl restart network
```

4. Netplan (新版 Ubuntu 的默认方式)

从 Ubuntu 17.10 开始,Ubuntu 引入了 `netplan` 来统一管理网络配置,它使用 YAML 文件。

配置文件位置: `/etc/netplan/` 目录下,一般是一个 `.yaml` 文件,例如 `00installerconfig.yaml` 或 `50cloudinit.yaml`。

编辑配置文件:

```bash
sudo nano /etc/netplan/00installerconfig.yaml
```

例如,配置静态 IP:

```yaml
network:
version: 2
ethernets:
eth0: 你的网卡名称
dhcp4: no 关闭DHCP
addresses:
192.168.1.100/24 IP和子网掩码
routes:
to: default
via: 192.168.1.1 网关
nameservers:
addresses: [8.8.8.8, 1.1.1.1] DNS服务器
```

如果你想用 DHCP,就改成:

```yaml
network:
version: 2
ethernets:
eth0:
dhcp4: yes
addresses: [] 这两行要注释掉或者删除
routes: []
nameservers: {}
```

应用配置:

```bash
sudo netplan apply
```

如果 `netplan` 在你的系统上没启用,或者你想切换到 NetworkManager 或 systemdnetworkd,需要先修改 `netplan` 的配置文件,然后禁用它,再启用你选择的那个服务。不过一般情况下,直接用 `netplan apply` 就行了。

总结一下,怎么选?

1. 如果你用的是比较新的 Linux 发行版(比如 Ubuntu 18.04+,CentOS/RHEL 8+),并且喜欢使用命令行,`systemdnetworkd` (配合 `.network` 文件) 或者 `NetworkManager` (配合 `nmcli`) 是主流。Ubuntu 的话,`netplan` 是默认首选。
2. 如果你是在配置虚拟机或者临时测试,想快速设置,用 `ip addr add` 是最快的。
3. 如果你遇到老系统,可能就需要熟悉 `/etc/network/interfaces` (Debian/Ubuntu) 或 `/etc/sysconfig/networkscripts/` (CentOS/RHEL) 了。

几个小贴士:

确认网卡名称: 每次操作之前,最好先用 `ip addr show` 或 `ifconfig` 看看你的网卡叫什么名字(比如 `eth0`、`ens33`、`enp0s3` 等),避免写错。
备份配置文件: 在修改任何配置文件之前,最好先备份一下原文件,万一搞砸了也好恢复。比如 `sudo cp /etc/network/interfaces /etc/network/interfaces.bak`。
注意 IP 地址冲突: 确保你设置的 IP 地址在你当前的局域网里是唯一的,否则会导致网络问题。
DNS 很重要: 即使 IP 配好了,没有正确的 DNS 服务器地址,你也很难访问外网(比如无法解析 `www.google.com`)。

掌握了这些,无论是临时应急还是长期部署,都能从容地给你的 Linux 服务器配上一个好用的 IP 地址了!

网友意见

user avatar

俺一般用比较粗暴的方法。



ifconfig 找出网卡的名字, 例如 “eno16780015”

** 这一步可以省略,有的极简镜像连 ifconfig 都没装


ls /etc/sysconfig/network-scripts/

** 记得用神奇的 [TAB] 键

举例

       ls /etc/sysconfig/network-scripts/ifcfg-eno16780015  cat /etc/sysconfig/network-scripts/ifcfg-eno16780015 cp /etc/sysconfig/network-scripts/ifcfg-eno16780015  ~/ifcfg-eno-bak     

然后, vi 进去改。


## /etc/sysconfig/network-scripts/ifcfg-eno16780015


       DEVICE="eno16780015" HWADDR="00:11:56:12:23:bb" # NM_CONTROLLED="no" ONBOOT="yes" BOOTPROTO=static #BOOTPROTO=dhcp IPADDR=10.1.2.168 NETMASK=255.255.255.0 GATEWAY=10.1.2.254 NETBOOT="yes" TYPE=Ethernet ZONE=public DEFROUTE="yes" PEERDNS="yes" PEERROUTES="yes" IPV6_DEFAULTDEV="eno16780015" IPV4_FAILURE_FATAL="no" IPV6INIT="no" IPV6_AUTOCONF="no" DOMAIN= localdomain IPV6ADDR=fe80::***:****:****:****/64 IPV6_DEFROUTE="yes" IPV6_PEERDNS="yes" IPV6_PEERROUTES="yes" IPV6_FAILURE_FATAL="no"     


:wq

reboot

幸好一直也没捅啥篓子。


俺发现有些 ISP 喜欢改这个文件。

莫名其妙的找不到域名。


这时就可以手工加上


       DNS1="8.8.8.8" DNS2="8.8.4.4" DNS3="208.67.222.222"     








很多人可能没碰到过 VPS 什么东西都没有的情况。。


例如 network-scripts 没装的时候,

systemctl restart network 就是在抓虾。

连网络都没有的情况下, 你想怎么 yum -y install network-scripts 呢?

别做梦了, 面对残酷的现实吧。


雪上加霜的是 'network-scripts' 在不远的将来要被废除, 呵呵




答主其他低赞回答或散文 (>2000 & < 10000 )


。。

类似的话题

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有