Akagi201
5/15/2014 - 11:31 AM

openwrt-mac.md

问题

多台openwrt设备在同一网络中使用产生MAC冲突

解决

1.修改lan, wan mac地址 编辑 /etc/config/network 修改其中一段

config 'interface' 'lan'
        option 'type' 'bridge'
        option 'ifname' 'eth0.0'
        option 'proto' 'static'
        option 'netmask' '255.255.255.0'
        option 'ipaddr' '192.168.200.1'
        option 'macaddr' 'd8:64:c7:5e:f1:c6' # 新增

config 'interface' 'wan'
        option 'ifname' 'eth0.1'
        option 'proto' 'dhcp'
        option 'macaddr' 'd8:64:c7:5e:f1:c6' # 新增

2.修改 eth0 mac地址

编辑 /etc/rc.local, 在启动脚本exit 0之前增加

ifconfig eth0 down;
ifconfig eth0 hw ether d8:64:c7:5e:f1:c6;
ifconfig eth0 up;
  1. 修改wireless mac地址 这就最纠结了直接修改 /etc/config/wireless 中的mac是没用的, 并且修改后无线网络会无法启动. 在研究了/sbin/wifi脚本后, 只能通过迂回战术来进行解决. 编辑 /sbin/wifi 修改下面一段
set_wifi_up() {
kill `cat /var/run/wifi-phy0.pid`
sed -i s/^bssid=.*/bssid=00:`$RANDOM | md5sum | sed 's/\(..\)/&:/g' | cut -c1-14`/ /var/run/hostapd-phy0.conf
hostapd -P /var/run/wifi-phy0.pid -B /var/run/hostapd-phy0.conf
    local cfg="$1"
    local ifname="$2"
    uci_set_state wireless "$cfg" up 1
    uci_set_state wireless "$cfg" ifname "$ifname"
}

set_wifi_up() {                                                    
        echo wifi_up;ls /tmp/run/*.conf         

        kill `cat /var/run/wifi-phy0.pid`       
        sed -i s/^bssid=.*/bssid=d8:64:c7:5f:f1:c6/ /var/run/hostapd-phy0.conf
        hostapd -P /var/run/wifi-phy0.pid -B /var/run/hostapd-phy0.conf

        local cfg="$1"                         
        echo wifi_up 2;ls /tmp/run/*.conf
        local ifname="$2"                     
        echo wifi_up 3;ls /tmp/run/*.conf
        uci_set_state wireless "$cfg" up 1
        uci_set_state wireless "$cfg" ifname "$ifname"

}   
  1. 修改完成 sync;reboot 重启, 就能看到所有修改都生效了.

Refs