Chinaunix

标题: 如何修改mac地址让它一直生效? [打印本页]

作者: sunmoonsea    时间: 2006-05-30 09:47
标题: 如何修改mac地址让它一直生效?
在论坛上看到大家关于如何修改mac地址:
sbin/ifconfig eth0 down
sbin/ifconfig eth0 hw ether 00 11 22 33 44 55
sbin/ifconfig eth0 up
通过ifconfig可以看到修改已经生效,可是重启机器后又恢复成了原来得mac.
不知道大家有什么好的方法?
作者: platinum    时间: 2006-05-30 10:32
写个 script,在开机后自动初始化一些你想要开机后自动完成的东西
参考 /etc/rc.local
作者: sunmoonsea    时间: 2006-05-30 10:56
rc.local中是否可以调整其先后顺序让mac执行于应用程序之前?
作者: platinum    时间: 2006-05-30 11:14
可以,修改 /etc/rc.sysinit 即可,把你想要的东西插到里面
作者: kenduest    时间: 2006-05-30 13:29
原帖由 sunmoonsea 于 2006-5-30 09:47 发表
在论坛上看到大家关于如何修改mac地址:
sbin/ifconfig eth0 down
sbin/ifconfig eth0 hw ether 00 11 22 33 44 55
sbin/ifconfig eth0 up
通过ifconfig可以看到修改已经生效,可是重启机器后又恢复成了原来得m ...


若是你是使用 RHEL 这类版本的话,请考虑先看一下 /etc/sysconfig/network-scripts/ifup 看一下:


  1. # this isn't the same as the MAC in the configuration filename.  It is
  2. # available as a configuration option in the config file, forcing the kernel
  3. # to think an ethernet card has a different MAC address than it really has.
  4. if [ -n "${MACADDR}" ]; then
  5.    ip link set dev ${DEVICE} address ${MACADDR}
  6. fi
  7. if [ -n "${MTU}" ]; then
  8.    ip link set dev ${DEVICE} mtu ${MTU}
  9. fi
复制代码


可以发现到目前都是流行使用 ip 程式,已经逐渐不使用 ifconfig 程式了。

而你网路卡配置 /etc/sysconfig/network-scripts/ifcfg-eth0 应该就会使用像是:


  1. DEVICE=eth0
  2. IPADDR=192.168.1.1
  3. NETMASK=255.255.255.0
  4. MACADDR=00:11:22:33:44:55
复制代码


其中 MACADDR 应该就是你预期要改的的项目。把预期的网路卡卡号放进去就可以。

改好执行 /etc/init.d/network stop ; /etc/init.d/network start

若是您是使用 SUSE Linux 的话,SuSE 本身就已经给您一个很明确清楚的样板档案,档案名称为 /etc/sysconfig/network/ifcfg.template,该档案里面有提到配置说明。

比方你目前使用中的网路卡的 mac addr 是  00:11:22:33:44:55,那您的系统应该就会有 /etc/sysconfig/network/ifcfg-eth-id-00:11:22:33:44:55 档案,该档案内容会像是:


  1. IPADDR=192.168.1.1
  2. NETMASK=255.255.255.0
复制代码


你要换网路卡卡号的话,就是多 LLADDR 该叙述。

  1. IPADDR=192.168.1.1
  2. NETMASK=255.255.255.0
  3. LLADDR=00:48:54:11:22:33
复制代码


改好后执行 rcnetwork stop ; rcnetwork start 应该就可以了 (用 ifup/ifdown 也可以)。

另外补充的是,使用 ip 程式配置网路介面 mac 组态的话,该配置设定实际底层会是:

  1. ip link set eth0 address 00:48:54:11:22:33
复制代码


提供给你参考。

==
作者: Ksharp    时间: 2006-05-30 14:19
顶一下,很专业
作者: sunmoonsea    时间: 2006-05-30 15:43
# remap, if the device is bound with a MAC address and not the right device num
# bail out, if the MAC does not fit
if [ -n "${HWADDR}" ]; then
    FOUNDMACADDR=`get_hwaddr ${REALDEVICE}`
    if [ "${FOUNDMACADDR}" != "${HWADDR}" ]; then
        curdev=`ip -o link | awk -F ':' -vIGNORECASE=1 '/$HWADDR/ { print $2 }'`        rename_device "${REALDEVICE}" "${HWADDR}" "${curdev}" || {
            echo $"Device ${DEVICE} has different MAC address than expected, ignoring."
            exit 1
        }
    fi
[root@mail1 network-scripts]# service network restart
Shutting down interface eth0:  Device eth0 has different MAC address than expected, ignoring.
                                                           [FAILED]
Shutting down interface eth1:                              [  OK  ]
Shutting down loopback interface:                          [  OK  ]
Setting network parameters:                                [  OK  ]
Bringing up loopback interface:                            [  OK  ]
Bringing up interface eth0:                                [  OK  ]
Bringing up interface eth1:                                [  OK  ]
作者: sunmoonsea    时间: 2006-05-30 15:53
To platinum :按照你说得,将脚本插入到/etc/rc.d/rc.sysinit中后,重启后脚本自动执行,mac实现了自动修改.
To kenduest  : 我按照你说得方法在/etc/sysconfig/network-scripts/脚本中更改了mac,重启network服务后生效了,可是reboot后网卡依然是原来得mac.
我直接使用ip程式进行mac得修改,效果还是一样.


刚才看kenduest说得ifup脚本中有一段关于脚本系统时与realdevice得mac得比较,让我觉得如果在这里是不是可以做一下修改.

每次重启时,系统在读mac得时候并不是取得etc/sysconfig/network-scripts/ifcfg-eth0脚本中得mac地址

[ 本帖最后由 sunmoonsea 于 2006-5-30 15:56 编辑 ]
作者: kenduest    时间: 2006-05-30 16:14
1. 請貼出你的 ifcfg-eth0 檔案設定

2. 請貼出 ifconfig eth0 顯示結果

==
作者: sunmoonsea    时间: 2006-05-30 16:34
[root@mail1 network-scripts]# more ifcfg-eth0
# Advanced Micro Devices [AMD]|79c970 [PCnet32 LANCE]
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.16.4
NETMASK=255.255.255.0
GATEWAY=192.168.16.1
HWADDR=00:11:22:33:44:55
[root@mail1 network-scripts]#
[root@mail1 network-scripts]# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:0C:29:3D:E2:28
          inet addr:192.168.16.4  Bcast:192.168.16.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1176 errors:0 dropped:0 overruns:0 frame:0
          TX packets:142 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:243888 (238.1 Kb)  TX bytes:17065 (16.6 Kb)
          Interrupt:10 Base address:0x1400

我想将mac改成:00:11:22:33:44:55,使用命令修改后,重启后有变回了原来得mac,计算机启动时,是从哪里读取得mac地址哪?

[ 本帖最后由 sunmoonsea 于 2006-5-30 16:44 编辑 ]
作者: kenduest    时间: 2006-05-30 18:33

  1. DEVICE=eth0
  2. IPADDR=192.168.1.1
  3. NETMASK=255.255.255.0
  4. MACADDR=00:11:22:33:44:55
复制代码


你確定你有改成這樣嗎 ? 注意 MACADDR,這是指定要變更使用目前預期的 mac address。

==
作者: sunmoonsea    时间: 2006-05-31 13:18
[root@mail1 network-scripts]# more ifcfg-eth0
# Advanced Micro Devices [AMD]|79c970 [PCnet32 LANCE]
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.16.4
NETMASK=255.255.255.0
GATEWAY=192.168.16.1
HWADDR=00:11:22:33:44:55,
是啊,这就是我现在ifcfg-eth0中的内容.
通过试验,发现ifup中所读取得realdevice就是读取得ifcfg-eth0中得mac数值.但是重启电脑得时候读取得不是这个脚本里面得mac数值,大家能帮忙做一下试验吗?我在自己电脑上做了好多次都是这个结果!
作者: platinum    时间: 2006-05-31 13:20
原帖由 kenduest 于 2006-5-30 18:33 发表

  1. DEVICE=eth0
  2. IPADDR=192.168.1.1
  3. NETMASK=255.255.255.0
  4. MACADDR=00:11:22:33:44:55
复制代码


你確定你有改成這樣嗎 ? 注意 MACADDR,這是指定要變更使用目前預期的 mac address。

==

这里的 MAC 如果改成和物理 MAC 不同的内容,network start 的时候会报 FAILD,我曾经试过
作者: x-phenix    时间: 2006-05-31 13:28
厉害 :) 我什么时候能到这个水平呢?
作者: kenduest    时间: 2006-05-31 13:46
原帖由 sunmoonsea 于 2006-5-31 13:18 发表
[root@mail1 network-scripts]# more ifcfg-eth0
# Advanced Micro Devices [AMD]|79c970 [PCnet32 LANCE]
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.16.4
NETMASK=255.255.255.0
GATEWAY=192.168.16.1
HWADDR=00:11:22:33:44:55


我还是没看到你写的 MACADDR 叙述不是 ? 你似乎都还是没写啊.... ??????

1. HWADDR 与 MACADDR 意思十万八千里... HWADDR 是指定系统有多张网路卡时, 只有网路卡 mac addr 为指定项目时才使用该 IP 分配设定。MACADDR 是说指定这个介面配置把网路卡 MAC 调整后才套用该 IP 配置。

2. 你用 pcnet32 driver ? 你该不会在 vmware 环境内 ? 我无法确定 vmware 环境内的 nic driver 是否有支援 mac 变更设定的功能,建议你找实际机器测试会比较好。

==

[ 本帖最后由 kenduest 于 2006-5-31 13:48 编辑 ]
作者: platinum    时间: 2006-05-31 13:48
原帖由 kenduest 于 2006-5-31 13:46 发表
大哥, HWADDR 与 MACADDR 意思十万八千里...

我看成了 HWADDR,关于 MACADDR 我还没有测试过,上面有些妄言了 ^_^
作者: kenduest    时间: 2006-05-31 14:02
原帖由 platinum 于 2006-5-31 13:48 发表
我看成了 HWADDR,关于 MACADDR 我还没有测试过,上面有些妄言了 ^_^


不会啦, 互相讨论求进步

端午节快乐啊

==
作者: kenduest    时间: 2006-05-31 14:08
原帖由 x-phenix 于 2006-5-31 13:28 发表
厉害 :) 我什么时候能到这个水平呢?


其實看一下 ifup 等相關 script 寫法應該就知道為何要這樣設定了

這就是 open source 好處,怎樣配置的流程都可以看的一清二楚.

==
作者: platinum    时间: 2006-05-31 14:36
原帖由 kenduest 于 2006-5-31 14:02 发表


不会啦, 互相讨论求进步

端午节快乐啊

==

谢谢 kenduest ^_^

不水了,目前由于没环境试验,还希望楼主尽快将试验结果告诉大家
作者: playmud    时间: 2006-06-01 12:56
[root@mylinux default]# cat ifcfg-eth0
# Intel Corporation 82540EP Gigabit Ethernet Controller (Mobile)
DEVICE=eth0
BOOTPROTO=none
BROADCAST=10.130.255.255
#HWADDR=00:11:25:2E:6E:18
IPADDR=10.130.1.212
NETMASK=255.255.0.0
NETWORK=10.130.0.0
MACADDR=11:22:33:44:55:66
ONBOOT=yes
USERCTL=yes
IPV6INIT=no
PEERDNS=yes
GATEWAY=10.130.254.254
TYPE=Ethernet
[root@mylinux default]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:11:25:2E:6E:18
          inet addr:10.130.1.212  Bcast:10.130.255.255  Mask:255.255.0.0
          inet6 addr: fe80::211:25ff:fe2e:6e18/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:916 errors:0 dropped:0 overruns:0 frame:0
          TX packets:242 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:171860 (167.8 KiB)  TX bytes:41960 (40.9 KiB)
          Base address:0x8000 Memory:c0220000-c0240000

非虚拟机。
作者: Andsun    时间: 2006-06-01 14:03
路过支持一下~~~~
作者: sunmoonsea    时间: 2006-06-06 11:25
原帖由 kenduest 于 2006-5-31 13:46 发表


我还是没看到你写的 MACADDR 叙述不是 ? 你似乎都还是没写啊.... ??????

1. HWADDR 与 MACADDR 意思十万八千里... HWADDR 是指定系统有多张网路卡时, 只有网路卡 mac addr 为指定项目时才使用该 IP 分配设 ...


to kenduest:
这几天出差了,一直没有做试验,刚看了一下,却是因为/network-scripts/if-eth0中没有注意到hwaddress与macaddress得区别.
换成macaddress后reboot后mac更改值生效了.顺便说一下,我这里用得是vmware
作者: ycxm    时间: 2006-06-29 10:50
好啊, 太好了, 有关vmware 在网络上的应用多贴点啊

现在 二个 三个系统 应用的很多啊
作者: zhangzhu1984    时间: 2006-07-21 09:29
原帖由 kenduest 于 2006-5-30 13:29 发表


若是你是使用 RHEL 这类版本的话,请考虑先看一下 /etc/sysconfig/network-scripts/ifup 看一下:

[code]
# this isn't the same as the MAC in the configuration filename.  It is
# available as a co ...




这位的方法我试过,我的是FC4,修改了之后,在ifdown eth0的时候会报一个错误:与原地址不符。但是MAC地址的确修改成了的
作者: matrix_lhx    时间: 2006-07-21 14:27
为什么我用的SUSE Linux 在打开ifcfg-eth-id-。。。。这个文件后,写入不了东西呢?
我还想问一下在SUSE下什么代表网关呢?还是GATEWAY吗?或者是其它的单词。因为我在安装SUSE的时候没有出现关于网关的配置项!
作者: kenduest    时间: 2006-07-21 17:33
原帖由 zhangzhu1984 于 2006-7-21 09:29 发表
这位的方法我试过,我的是FC4,修改了之后,在ifdown eth0的时候会报一个错误:与原地址不符。但是MAC地址的确修改成了的


你改过 MACADDR,那请把 HWADDR 也改好与 MACADDR 相同吧。或者是根本就不要写 HWADDR ,这样才不会让问题更复杂。

==

[ 本帖最后由 kenduest 于 2006-7-21 17:34 编辑 ]
作者: kenduest    时间: 2006-07-21 17:37
原帖由 matrix_lhx 于 2006-7-21 14:27 发表
为什么我用的SUSE Linux 在打开ifcfg-eth-id-。。。。这个文件后,写入不了东西呢?


因为你根本不是 root 身分?

我还想问一下在SUSE下什么代表网关呢?还是GATEWAY吗?或者是其它的单词。因为我在安装SUSE的时候没有出现关于网关的配置项!


你应该先看一下 suse 官方本身提供的 system/network administration guide,里面都说很清楚相关配置。若真的不清楚请自行用 yast 去修改网路配置吧。

==
作者: big    时间: 2006-07-28 19:52
标题: 改硬件mac.
如果是软件需要的话,我可以给你一个改过的intel 82559。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2