在 sophpi 中,默认网卡 eth0 的 MAC 地址未配置,是随机生成的。这样就会导致每次重启之后,MAC 地址会改变,从而导致通过 DHCP 获取 IP 地址每次也都在变化。
查看 MAC 地址
前文提到 eth0 自动使能并通过 DHCP 获取 IP 地址,因此需要修改默认的 MAC 地址,使其固定。
- 通过
ifconfig -a
命令查看当前 MAC 地址
shell
[root@sg200x]~# ifconfig -a
eth0 Link encap:Ethernet HWaddr BA:81:1D:4E:E2:96
inet addr:192.168.31.157 Bcast:192.168.31.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:176 errors:0 dropped:0 overruns:0 frame:0
TX packets:75 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:24384 (23.8 KiB) TX bytes:6610 (6.4 KiB)
Interrupt:22
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:16 errors:0 dropped:0 overruns:0 frame:0
TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1056 (1.0 KiB) TX bytes:1056 (1.0 KiB)
ifconfig 是传统的 GNU/Linux 下的网络配置工具。只需执行 ifconfig 就可以看到当前系统已经启动的网卡。其中 lo 是回环设备,指代本机,eth 开头的是有线以太网设备,wlan 开头的是无线网络设备,
可使用 ifconfig -a
查看所有网卡,包括未启动的网卡,而 ifconfig
只能查看已启动的网卡。
shell
[root@sg200x]~# ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
[root@sg200x]~# ifconfig -a
eth0 Link encap:Ethernet HWaddr 2A:95:EC:D1:D6:CA
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:21
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
也可使用通过 cat /sys/class/net/eth0/address
命令查看 MAC 地址。
修改 MAC 地址
临时修改
shell
$ ifconfig eth0 down
$ ifconfig eth0 hw ether 00:12:34:56:78:9a
$ ifconfig eth0 up
这种方法修改 MAC 地址,重新启动主机系统后,MAC 地址会自动还原。
永久修改
编辑 /etc/network/interfaces
文件,
shell
$ vi /etc/network/interfaces
# 添加这一行
$ pre-up ifconfig eth0 hw ether 78:01:B3:FC:E8:55
保存退出,重启系统,MAC 地址修改成功。
再次查看 MAC 地址,发现已经修改成功。
shell
[root@sg200x]~# ifconfig -a
eth0 Link encap:Ethernet HWaddr 78:01:B3:FC:E8:55
inet addr:192.168.31.222 Bcast:192.168.31.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:21 errors:0 dropped:0 overruns:0 frame:0
TX packets:17 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3022 (2.9 KiB) TX bytes:1870 (1.8 KiB)
Interrupt:22
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:16 errors:0 dropped:0 overruns:0 frame:0
TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1056 (1.0 KiB) TX bytes:1056 (1.0 KiB)
相关命令
ifconfig
ifconfig 是一个用于配置网络接口的命令行工具。它可以用于查看、启动、停止和配置网络接口,包括设置 IP 地址、子网掩码、广播地址、MAC 地址等。
ifconfig -a 命令用于显示所有网络接口的信息,包括那些当前未激活的接口。这个命令会列出所有网络接口的详细信息,包括硬件地址、IP 地址、子网掩码、广播地址等。
pre-up
在 Linux 的网络接口配置文件中,pre-up 是一个关键字,它指的是在网络接口被激活(即 up)之前应执行的命令或脚本。
这些命令通常用于在接口真正启动前做一些准备工作,比如设置硬件地址、加载模块或者进行其他一些必要的配置调整。
pre-up 指令通常出现在 /etc/network/interfaces
或者类似配置文件中,用来确保某些操作先于接口激活完成。
例如: pre-up ifconfig eth0 hw ether MAC-ADDRESS
这样的行会在 eth0 接口被激活之前,使用 ifconfig 命令来修改该接口的硬件地址(MAC 地址)为指定的 MAC-ADDRESS。
sync
在 Linux 系统中,sync 命令可以将所有未写的系统缓冲区写到磁盘中,包括已修改的 i-node、已延迟的块 I/O 和读写映射文件。这个命令在关机或重启前使用,以确保所有数据都被正确保存到硬盘上。