文章目录
- 对于普通的 Linux 操作系统
- 对于 Red Hat Enterprise Linux 9
笔者的运行环境:
CentOS 8
Red Hat Enterprise Linux 9
在 Linux 中将本地网络 IP 设置为静态的,只需要在那台 Linux 上设置即可。为了方便,这里笔者使用了 Xshell 来远程访问那台 Linux。关于如何在 Windows 主机上访问本地局域网中的 Linux 主机,可见笔者的另一篇博客:
如何在 Windows 主机上访问本地局域网中的 Linux 主机:
https://blog.csdn.net/wangpaiblog/article/details/120052152
对于普通的 Linux 操作系统
-
输入以下命令查看 Linux 网络信息:
ifconfig
[root@192 ~]# ifconfig eno2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.0.105 netmask 255.255.255.0 broadcast 192.168.0.255 inet6 fe80::a6bb:6dff:fe91:f348 prefixlen 64 scopeid 0x20<link> ether a4:bb:6d:91:f3:48 txqueuelen 1000 (Ethernet) RX packets 13323 bytes 16266935 (15.5 MiB) RX errors 0 dropped 5 overruns 0 frame 0 TX packets 2803 bytes 229940 (224.5 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 device interrupt 16 memory 0xd1200000-d1220000 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255 ether 52:54:00:65:68:9d txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
可以看出,笔者的这台 Linux 的本地有线网络
eno2
的 IP 是192.168.0.105
。 -
使用如下命令查看上述 IP 的生成方式:
ip a
[root@192 ~]# ip a 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: eno2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether a4:bb:6d:91:f3:48 brd ff:ff:ff:ff:ff:ff inet 192.168.0.105/24 brd 192.168.0.255 scope global dynamic noprefixroute eno2 valid_lft 6688sec preferred_lft 6688sec inet6 fe80::a6bb:6dff:fe91:f348/64 scope link noprefixroute valid_lft forever preferred_lft forever 3: wlo1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 3e:bc:84:2c:c7:25 brd ff:ff:ff:ff:ff:ff permaddr 2c:6d:c1:6b:0e:59 4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000 link/ether 52:54:00:65:68:9d brd ff:ff:ff:ff:ff:ff inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0 valid_lft forever preferred_lft forever 5: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr0 state DOWN group default qlen 1000 link/ether 52:54:00:65:68:9d brd ff:ff:ff:ff:ff:ff
可以看出,笔者的这台 Linux 的本地有线网络
eno2
的 IP 是动态生成的,这不符本文的要求。 -
使用如下命令之一来查看本机网关、掩码等信息。
route -n
[root@192 ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.0.1 0.0.0.0 UG 100 0 0 eno2 192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eno2 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
netstat -nr
[root@192 ~]# netstat -nr Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 eno2 192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eno2 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
ip route
[root@192 ~]# ip route default via 192.168.0.1 dev eno2 proto dhcp metric 100 192.168.0.0/24 dev eno2 proto kernel scope link src 192.168.0.105 metric 100 192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown
另外,输入以下命令也还可以查看更丰富的信息。
nmcli device show
(此命令的输出内容太多,这里只展示部分内容)
[root@192 ~]# nmcli device show GENERAL.DEVICE: eno2 GENERAL.TYPE: ethernet GENERAL.HWADDR: A4:BB:6D:91:F3:48 GENERAL.MTU: 1500 GENERAL.STATE: 100(已连接) GENERAL.CONNECTION: eno2 GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/1 WIRED-PROPERTIES.CARRIER: 开 IP4.ADDRESS[1]: 192.168.0.105/24 IP4.GATEWAY: 192.168.0.1 IP4.ROUTE[1]: dst = 0.0.0.0/0, nh = 192.168.0.1, mt = 100 IP4.ROUTE[2]: dst = 192.168.0.0/24, nh = 0.0.0.0, mt = 100 IP4.DNS[1]: 192.168.1.1 IP4.DNS[2]: 192.168.0.1 IP6.ADDRESS[1]: fe80::a6bb:6dff:fe91:f348/64 IP6.GATEWAY: -- IP6.ROUTE[1]: dst = fe80::/64, nh = ::, mt = 100 [...其它内容省略...]
可以看出,笔者的这台 Linux 的本地有线网络
eno2
的 IP 是192.168.0.105
,网关是192.168.0.1
,掩码为255.255.255.0
。 -
进入
/etc/sysconfig/network-scripts
目录,可以看到下面有一个关于笔者的这台 Linux 的本地有线网络eno2
的一个文件ifcfg-eno2
。进入此目录的方法有很多,不详细介绍,这里笔者使用的是 Xftp。 -
打开此文件,可以看到如下内容。
TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=dhcp DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no NAME=eno2 UUID=c073a18d-52af-44fc-ad1a-ec272625d869 DEVICE=eno2 ONBOOT=yes
可以看出,上面
BOOTPROTO
的值为dhcp
。这印证了前面笔者的这台 Linux 的本地有线网络eno2
的 IP 是动态生成的。
【附】
BOOTPROTO
是用于配置网络接口的引导协议(Boot Protocol)的选项之一。BOOTPROTO
指定了网络接口的配置方式,可以设置为以下几个值之一:none
:手动配置网络接口的IP地址等参数,不使用任何引导协议。static
:手动配置静态IP地址,子网掩码,网关等参数。dhcp
:使用动态主机配置协议(DHCP)从网络中的DHCP
服务器获取IP地址和其他网络参数。bootp
:使用引导协议(BOOTP)从网络中的BOOTP
服务器获取IP地址和其他网络参数。
因此,
BOOTPROTO
的值决定了网络接口是通过手动配置还是通过DHCP
或BOOTP
协议自动获取网络配置信息。
-
因此,需要将上面
BOOTPROTO
的值改为为static
。此外,还需要在该文件中追加如下信息。IPADDR=192.168.0.102 NETMASK=255.255.255.0 GATEWAY=192.168.0.1
各字段解释如下:
- IPADDR (IP Address):IP。本地目前的 IP 为
192.168.0.105
,这里改为192.168.0.102
来查看修改后的效果。 - NETMASK (Network Mask):掩码。此值的获取前面已提到过。
- GATEWAY:默认网关的 IP。此值的获取前面已提到过。
- IPADDR (IP Address):IP。本地目前的 IP 为
-
输入以下命令重启网络。
nmcli c reload
-
输入以下命令重启上面提到的本地有线网络,这会使上面的配置文件生效 。对于笔者,此网络为
eno2
。因此,笔者需要输入的命令为nmcli c up eno2
。nmcli c up 读者自己的网络名
-
现在,笔者的这台 Linux 的本地有线网络
eno2
的 IP 已经改变了,因为 Xshell 中显示与这台 Linux 的连接已经断开了。如果读者的 Linux 没有改变,重启自己 Linux。重启的方法有很多,如下命令即可。reboot
-
验证 IP 是否为静态,且为前面配置文件中配置的值。此方法很简单,直接把前面使用的命令重新使用一遍即可。
[root@localhost ~]# ifconfig eno2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.0.102 netmask 255.255.0.0 broadcast 192.168.255.255 inet6 fe80::a6bb:6dff:fe91:f348 prefixlen 64 scopeid 0x20<link> ether a4:bb:6d:91:f3:48 txqueuelen 1000 (Ethernet) RX packets 17485 bytes 16632074 (15.8 MiB) RX errors 0 dropped 5 overruns 0 frame 0 TX packets 4518 bytes 373655 (364.8 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 device interrupt 16 memory 0xd1200000-d1220000 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 12 bytes 1216 (1.1 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 12 bytes 1216 (1.1 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255 ether 52:54:00:65:68:9d txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@localhost ~]# ip a 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: eno2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether a4:bb:6d:91:f3:48 brd ff:ff:ff:ff:ff:ff inet 192.168.0.102/16 brd 192.168.255.255 scope global noprefixroute eno2 valid_lft forever preferred_lft forever inet6 fe80::a6bb:6dff:fe91:f348/64 scope link noprefixroute valid_lft forever preferred_lft forever 3: wlo1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 3e:bc:84:2c:c7:25 brd ff:ff:ff:ff:ff:ff permaddr 2c:6d:c1:6b:0e:59 4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000 link/ether 52:54:00:65:68:9d brd ff:ff:ff:ff:ff:ff inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0 valid_lft forever preferred_lft forever 5: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr0 state DOWN group default qlen 1000 link/ether 52:54:00:65:68:9d brd ff:ff:ff:ff:ff:ff
可以看出,笔者这台 Linux 的 IP 已经变成了
192.168.0.102
,且 IP 不是动态的。
对于 Red Hat Enterprise Linux 9
-
首先,验证自己的操作系统是否是 Red Hat Enterprise Linux 9。可以使用如下命令之一来确定。
cat /etc/system-release
[root@192 ~]# cat /etc/system-release Red Hat Enterprise Linux release 9.2 (Plow)
hostnamectl
[root@192 ~]# hostnamectl Static hostname: (unset) Transient hostname: 192.168.11.128 Icon name: computer-vm Chassis: vm 🖴 Machine ID: d4ef3f706c974e4c8bc4637954a306b5 Boot ID: c6b16cfac5c348629a9b382e2839d157 Virtualization: vmware Operating System: Red Hat Enterprise Linux 9.2 (Plow) CPE OS Name: cpe:/o:redhat:enterprise_linux:9::baseos Kernel: Linux 5.14.0-284.11.1.el9_2.x86_64 Architecture: x86-64 Hardware Vendor: VMware, Inc. Hardware Model: VMware Virtual Platform Firmware Version: 6.00
-
对于 Red Hat Enterprise Linux 9,不能使用前面的那种在目录
/etc/sysconfig/network-scripts
的配置文件中设置的方法。因为 Red Hat Enterprise Linux 9 已经不支持这种方式了,在此目录中不会提供相应的配置文件,而只是一个readme-ifcfg-rh.txt
的说明文件。该说明文件表示,上面的那个目录已经弃用,而改用目录/etc/NetworkManager/system-connections/
。NetworkManager stores new network profiles in keyfile format in the /etc/NetworkManager/system-connections/ directory. Previously, NetworkManager stored network profiles in ifcfg format in this directory (/etc/sysconfig/network-scripts/). However, the ifcfg format is deprecated. By default, NetworkManager no longer creates new profiles in this format. Connection profiles in keyfile format have many benefits. For example, this format is INI file-based and can easily be parsed and generated. Each section in NetworkManager keyfiles corresponds to a NetworkManager setting name as described in the nm-settings(5) and nm-settings-keyfile(5) man pages. Each key-value-pair in a section is one of the properties listed in the settings specification of the man page. If you still use network profiles in ifcfg format, consider migrating them to keyfile format. To migrate all profiles at once, enter: # nmcli connection migrate This command migrates all profiles from ifcfg format to keyfile format and stores them in /etc/NetworkManager/system-connections/. Alternatively, to migrate only a specific profile, enter: # nmcli connection migrate <profile_name|UUID|D-Bus_path> For further details, see: * nm-settings-keyfile(5) * nmcli(1)
而目录
/etc/NetworkManager/system-connections
下的文件ens160.nmconnection
的内容如下。[connection] id=ens160 uuid=437751db-4e0b-3dba-a812-41fa3a97cc30 type=ethernet autoconnect-priority=-999 interface-name=ens160 timestamp=1688614972 [ethernet] [ipv4] method=auto [ipv6] addr-gen-mode=eui64 method=auto [proxy]
不过,Red Hat Enterprise Linux 9 提供了另一种方式,可以直接通过系统内置的 GUI 界面来配置静态 IP。这个方法有很多,这里使用最简单的方式。但在此之前,需要先确认自己的原始网络信息。
-
输入以下命令查看 Linux 网络信息。如本机网络名、IP、网关、掩码等信息。
ip a
[root@192 ~]# ip a 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: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:4e:5e:1f brd ff:ff:ff:ff:ff:ff altname enp3s0 inet 192.168.11.128/24 brd 192.168.11.255 scope global dynamic noprefixroute ens160 valid_lft 1580sec preferred_lft 1580sec inet6 fe80::20c:29ff:fe4e:5e1f/64 scope link noprefixroute valid_lft forever preferred_lft forever
route -n
[root@192 ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.11.2 0.0.0.0 UG 100 0 0 ens160 192.168.11.0 0.0.0.0 255.255.255.0 U 100 0 0 ens160
使用如下命令查看 DNS 服务器 IP。
cat /etc/resolv.conf
[root@192 ~]# cat /etc/resolv.conf # Generated by NetworkManager nameserver 192.168.11.2
可以看出,本机有线网络名为
ens160
,对应的 IP 为192.168.11.128
,网关为192.168.11.2
,掩码为255.255.255.0
,DNS 为192.168.11.2
,且 IP 是动态的,这不符本文的要求。 -
在 Red Hat Enterprise Linux 9 桌面右上角进行与本机网络有关的设置。这里,笔者使用的是有线连接。
-
可以看出本机有线网络的 IPv4 是自动生成的,这印证了前面笔者的这台 Linux 的本地有线网络
ens160
的 IP 是动态的。 -
将其改为手动并按前面查询的数据填写即可。这里,笔者将 IP 由原来的
192.168.11.128
改为192.168.11.130
,来查看修改后的效果。
【踩坑提醒】
此处需要设置 DNS 服务器地址。如果不设置,不会影响与 Linux 的远程连接,但是会导致这台 Linux 不能连互联网,从而导致无法联网安装应用。
-
修改之后,笔者的 Xshell 已经不能连接此 Linux 了,说明前面的修改生效了。可以输入命令作进一步验证。
ifconfig
[root@localhost ~]# ifconfig ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.11.130 netmask 255.255.255.0 broadcast 192.168.11.255 inet6 fe80::20c:29ff:fe4e:5e1f prefixlen 64 scopeid 0x20<link> ether 00:0c:29:4e:5e:1f txqueuelen 1000 (Ethernet) RX packets 2071 bytes 1652085 (1.5 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 1336 bytes 144546 (141.1 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 42 bytes 4942 (4.8 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 42 bytes 4942 (4.8 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
可以看出,前面的修改确实生效了。
-
现在,再去查看目录
/etc/NetworkManager/system-connections
下的文件ens160.nmconnection
,发现它的内容变成了如下这样。[connection] id=ens160 uuid=437751db-4e0b-3dba-a812-41fa3a97cc30 type=ethernet autoconnect-priority=-999 interface-name=ens160 timestamp=1688587093 [ethernet] [ipv4] address1=192.168.11.130/24,192.168.11.2 method=manual [ipv6] addr-gen-mode=eui64 method=auto [proxy]