思路: 在路由器上获取arp表中的客户端网卡mac地址,并将mac地址计算为ipv6地址,分别添加路由和邻居发现代理

依赖: Linux > 2.6.19 ip,grep,sed,awk,radvd(用于分配ipv6地址)

实现:

```bash # This script auto configure ipv6_proxy_ndp # # @author: asxzyasxzy@asxzy.net # -> yes -> maintan -> # config -> get arp list -> get neigh list -| |-> add new client to the neigh # ——–> no —– >

config

PREFIX=’2001:250:1006:3006’ ROUTER=’2001:250:1006:3006::1’ WAN=’eth1’ LAN=’br-lan’

get the client list

ARP=$(cat /proc/net/arp | grep ‘br-lan’ | awk ‘{print $4}’ | sed -e “s/://g” | awk ‘BEGIN{FS=””}{if($1>0){print $1}if($2==8){print “a”}else if($2==9){print “b”}else if($2==12){print “e”}else if($2==13){print “f”}else if($2==14){print “c”}else if($2==15){print “d”}else if($2==2||$2==3||$2==6||$2==7||$2==10||$2==11){print $2-2}else{print $2+2}}’ | sed -e “s/^/${PREFIX}:/”)

check the pid and ipv6 route

COUNT=0 NEW=’’ if [ ! -f /tmp/ipv6.pid || $(ip -6 route | grep ${ROUTER} -c) -ne 0 ] then # add the default route ip -6 route add default via ${ROUTER} dev ${WAN} # add new client to the neigh & route list for i in ${ARP} do ip -6 neigh add proxy $i dev ${WAN} ip -6 route add $i dev ${LAN} done else # check list for i in ${ARP} do if [ $(cat /tmp/ipv6.pid | grep ${i} -c) -ne 0 ] then # add new client to the neigh & route list ip -6 neigh add proxy $i dev ${WAN} ip -6 route add $i dev ${LAN} else # make a disconnected-client list sed -i “/$i/d” /tmp/ipv6.pid fi done # del discontected-client from the list for i in cat /tmp/ipv6.pid do ip -6 neigh del proxy $i dev ${WAN} ip -6 route del $i dev ${LAN} done fi

write client list into pid

echo ${ARP} > /tmp/ipv6.pid ```

测试阶段,windows有待验证。,由于添加的ipv6地址为mac计算所得,windows NT6以上必须关闭随机ipv6地址生成功能才能使用该脚本