如何在 Linux 中将本地网络 IP 设置为静态的

笔者的运行环境:

  • 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 操作系统

  1. 输入以下命令查看 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

  2. 使用如下命令查看上述 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 是动态生成的,这不符本文的要求。

    在这里插入图片描述

  3. 使用如下命令之一来查看本机网关、掩码等信息。

    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

  4. 进入 /etc/sysconfig/network-scripts 目录,可以看到下面有一个关于笔者的这台 Linux 的本地有线网络 eno2 的一个文件 ifcfg-eno2。进入此目录的方法有很多,不详细介绍,这里笔者使用的是 Xftp。

    在这里插入图片描述

  5. 打开此文件,可以看到如下内容。

    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的值决定了网络接口是通过手动配置还是通过 DHCPBOOTP 协议自动获取网络配置信息。


  6. 因此,需要将上面 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。此值的获取前面已提到过。

  7. 输入以下命令重启网络。

    nmcli c reload

  8. 输入以下命令重启上面提到的本地有线网络,这会使上面的配置文件生效 。对于笔者,此网络为 eno2。因此,笔者需要输入的命令为 nmcli c up eno2

    nmcli c up 读者自己的网络名

  9. 现在,笔者的这台 Linux 的本地有线网络 eno2 的 IP 已经改变了,因为 Xshell 中显示与这台 Linux 的连接已经断开了。如果读者的 Linux 没有改变,重启自己 Linux。重启的方法有很多,如下命令即可。

    reboot

  10. 验证 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

  1. 首先,验证自己的操作系统是否是 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
    
  2. 对于 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。这个方法有很多,这里使用最简单的方式。但在此之前,需要先确认自己的原始网络信息。

  3. 输入以下命令查看 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 是动态的,这不符本文的要求。

  4. 在 Red Hat Enterprise Linux 9 桌面右上角进行与本机网络有关的设置。这里,笔者使用的是有线连接。

    在这里插入图片描述

  5. 可以看出本机有线网络的 IPv4 是自动生成的,这印证了前面笔者的这台 Linux 的本地有线网络 ens160 的 IP 是动态的。

    在这里插入图片描述

  6. 将其改为手动并按前面查询的数据填写即可。这里,笔者将 IP 由原来的 192.168.11.128 改为 192.168.11.130,来查看修改后的效果。

    在这里插入图片描述


    【踩坑提醒】

      此处需要设置 DNS 服务器地址。如果不设置,不会影响与 Linux 的远程连接,但是会导致这台 Linux 不能连互联网,从而导致无法联网安装应用。


  7. 修改之后上面的设置不会立刻生效,需要重启网络才能生效。在 Red Hat Enterprise Linux 9 中重启网络很简单,只需要在 UI 界面中关闭再开启即可。

    在这里插入图片描述

  8. 在重启有线网络之后,笔者的 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
    

    可以看出,前面的修改确实生效了。

  9. 现在,再去查看目录 /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]
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值