Linux 重新获取局域网IP 地址

Published on Dec 24, 2021

背景

这两天压测一个项目, 结果 Mysql 报了一个很少见到的错误: SQLSTATE[1129] too many connection errors from 172.16.36.41:34364 . 关于这个 mysql 错误的成因和基于 mysql 层面怎么解决, 并不是本文要讨论的问题. 文末会附上一个关于这个问题讨论的链接.

Mysql 是公司的服务器,由专门的运维同学管理,我手上的帐号权限不够,所以要想其他办法绕过这个问题。 通过报错信息,结果自己本机的内网 IP, 能确定被封的是我本机的内网 IP, 那是不是我换一个内网 IP 就可以绕过问题。

实践

方案一: 切换另一个 dhcp 客户端

我的电脑上装有两个 dhcp 客户端, dhclientdhcpcd. 默认使用的 dhclient, 这个时候只需要停用 dhclient, 转为使用 dhcpcd. 即可以获取到一个新的 IP 地址.

  1. 查看本机 IP
    • ip addr show

      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: enp4s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
          link/ether 00:1d:98:5a:d1:3a brd ff:ff:ff:ff:ff:ff
          inet 172.16.36.139/24 brd 172.16.36.255 scope global dynamic noprefixroute enp4s0
             valid_lft 336229sec preferred_lft 260629sec
          inet6 fe80::75bc:a2b2:962e:5bd3/64 scope link
             valid_lft forever preferred_lft forever
      
  2. 查看所有网络接口
    • ip link show

      1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
      link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
      2: enp4s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
      link/ether 00:1d:98:5a:d1:3a brd ff:ff:ff:ff:ff:ff
      
  3. 清空 enp4s0 网卡配置
    • sudo ip addr flush enp4s0
  4. 启用 dhcpcd 客户端
    • sudo systemctl start dhcpcd.service
  5. 再次使用 ip addr show 查看 IP 地址, 确认已获取到新的地址

方案二: 修改网卡 MAC 地址

  1. 查看所有网络接口和 MAC 地址
    • ip link show

      1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
      link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
      2: enp4s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
      link/ether 00:1d:98:5a:d1:3a brd ff:ff:ff:ff:ff:ff
      
  2. 禁用网卡
    • ip link set dev enp4s0 down
  3. 修改 MAC 地址
    • ip link set dev enp4s0 address 00:1d:98:5a:d1:3b
  4. 重新启用网卡
    • ip link set dev enp4s0 up
  5. 使用 dhclient 重新获取 IP
    • sudo dhclient -v enp4s0
  6. 使用 ip addr show 查看 IP 地址, 确认一切正常, 获取到了新的地址

参考