找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 12057|回复: 24

构建集成napt66的OpenWrt固件详细教程

[复制链接]
本帖最后由 forward 于 2013-6-19 14:59 编辑

声明:部分引用于网络上其他教程,是众多教程的综合版
刷机有风险,本人概不负责

1 编译环境的准备

      
       在电脑或者虚拟机上安装Linux系统。我使用的是在虚拟机安装Ubuntu 10.04版本,并且全程保持网络畅通。
1.1 Ubuntu开发环境需要的软件
       在终端输入以下命令,安装编译环境依赖的软件包
sudo apt-get update
sudo apt-get install gcc g++ binutils patch bzip2flex bison make unzip autoconf gettext texinfo sharutils subversionlibncurses5-dev ncurses-term zlib1g-dev gawk git-core build-essential
1.2 下载OpenWrt源代码
       在终端输入以下命令
$ mkdir trunk
$ cd trunk
$ svn co svn://svn.openwrt.org/openwrt/trunk
       或者国内源svn co svn://svn.openwrt.org.cn/openwrt/trunk
1.3 更新feed及添加packages
       如果需要LuCI的web管理界面和常用软件包支持,那么需要更新LuCI和官方自带的软件包的feed源,可以更改或者查看trunk目录下的feeds.conf.default文件里面的更新源地址,去掉#号注释添加自己想要的软件源:输入以下命令
$ cd /trunk/
$./scripts/feeds update-a
$./scripts/feeds install-a
       当然,推荐更新所有feed并添加所有package
$./scripts/feeds update –a
$./scripts/feeds install–a

2 集成软件包进行编译

      编译过程中需要用普通用户权限,使用非root用户进行操作。如果使用root权限进行编译操作的话,会提示错误:Checking'non-root'... failed。
[openwrt@localhost trunk]$ make defconfig
       检查默认的编译环境。
[openwrt@localhost trunk]$ make prereq
       进行预编译准备。
[openwrt@localhost trunk]$ make menuconfig

file:///H:\TEMP\msohtmlclip1\01\clip_image002.jpg
       一般默认OpenWrt初始编译配置是不包含LuCI界面的,需要自己添加进去
       一般情况,全程联网,使用一个简单的命令即可完成:
$ make
       新生成的镜像会默认放在新建的一个bin目录下。例如:/bin/brcm63xx/
       如果不清理编译产生的文件,下次编译时可能会造成冲突,执行make clean在执行clean命令,确保已经将编译好的image进行了备份。清理工作会清除bin目录。
[openwrt@localhost trunk]$ make clean  
第一次编译大概需要数小时才能完成编译。

3.添加IPv6的NAT功能

       先编译make一次产生./trunk/build_dir/等预编译文件,然后不能进行make clean等清除操作。
加入一些依赖组件,包括ip6tables,radvd,ip,odhcp6c
在网络上下载好napt66-0.2.tar.gz源代码,并在./trunk/dl放好napt66-0.2.tar.gz,在./trunk/package放包含它的makefile文件夹即可在编译菜单中添加napt66,如图:
file:///H:\TEMP\msohtmlclip1\01\clip_image004.jpg
Kernel modules->NetfilterExtensions->kmod-napt66
另外,napt66的init其实是不适用于我这里的网络环境的,可以删掉./trunk/package/napt66/files/napt66.init
还需要修改./trunk/package/napt66/Makefile中的
#define KernelPackage/napt66/install
##   $(INSTALL_DIR)$(1)/etc/init.d/
#     $(INSTALL_BIN)./files/napt66.init $(1)/etc/init.d/napt66
#endef
还需要修改radvd的判断代码,在
./trunk/build_dir/target-mips_uClibc-0.9.33.2/radvd-1.9.1/radvd.c
注释掉以下函数的对应判断代码段,大概在795行的代码附近
int
check_ip6_forwarding(void){
......
// if (value != 1) {
// flog(LOG_DEBUG, "IPv6 forwarding settingis: %u, should be 1", value);
// return(-1);
// }
......
}

修改Linux 内核IPv6转发代码。
在./trunk/build_dir/target-mips_uClibc-0.9.33.2/linux-brcm63xx/linux-3.7.10/net/ipv6/ip6_output.c。
注释掉376行和377行的代码:
// if (net->ipv6.devconf_all->forwarding ==0)
// goto error;

编译启动wifi 配置,默认是关闭WiFi的。
打开./trunk/package/mac80211/files/lib/wifi/mac80211.sh文件。
搜索optiondisabled 1,删掉并保存修改。
在./trunk/files按路由的文件系统的路径,加入配置文件。例如:
./trunk/etc/config/firewall
./trunk/odhcp6c.user
./trunk/etc/radvd.conf
./trunk/etc/rc.local
./trunk/etc/config/firewall如下
config defaults
       optionsyn_flood '1'
       optioninput 'ACCEPT'
       optionoutput 'ACCEPT'
       optionforward 'ACCEPT'
config zone
       optionname 'lan'
       optionnetwork 'lan'
       optioninput 'ACCEPT'
       optionoutput 'ACCEPT'
       optionforward 'REJECT'
       optionfamily 'ipv4'
config zone
       optionname 'wan'
       optionnetwork 'wan'
       optionoutput 'ACCEPT'
       optionmasq '1'
       optionmtu_fix '1'
       optioninput 'REJECT'
       optionforward 'REJECT'
       optionfamily 'ipv4'
config zone
       optionname 'wan'6
       option network'wan6'
       optionfamily 'ipv6'
       optionoutput 'ACCEPT'
       optionforward 'REJECT'
       optioninput 'ACCEPT'
config forwarding
       optionsrc 'lan'
       optiondest 'wan'
config forwarding
       optionsrc 'lan'
       optiondest 'wan6'
config rule
       optionname 'Allow-DHCP-Renew'
       optionsrc 'wan'
       optionproto 'udp'
       optiondest_port '68'
       optiontarget 'ACCEPT'
       optionfamily 'ipv4'
config rule
       optionname 'Allow-Ping'
       optionsrc 'wan'
       optionproto 'icmp'
       optionicmp_type 'echo-request'
       optionfamily 'ipv4'
       optiontarget 'ACCEPT'
config include
       optionpath '/etc/firewall.user'
./trunk/odhcp6c.user如下
ip -6 route add $(ifconfig $(uci getnetwork.wan.ifname) | grep Scope:Global | cut -d ' ' -f 13) dev $(uci getnetwork.wan.ifname) proto kernel  metric256
ip -6 route del default
ip -6 route add default via $(ifconfig $(uci getnetwork.wan.ifname) | grep Scope:Global | cut -d ' ' -f 13 | cut -d : -f1-4)::1 dev $(uci get network.wan.ifname)
./trunk/etc/radvd.conf如下
interface br-lan{
AdvSendAdvert on;
MinRtrAdvInterval 5;
MaxRtrAdvInterval 10;
AdvManagedFlag off;
AdvOtherConfigFlag off;
AdvDefaultPreference high;
prefix fc00:0101:0101::/64{
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
};
RDNSS fc00:0101:0101::1{
AdvRDNSSPreference 15;
AdvRDNSSOpen on;
};
};
./trunk/etc/rc.local如下
# Put your custom commands here that should beexecuted once
# the system init finished. By default this filedoes nothing.
radvd
insmod /lib/modules/$(uname -r)/napt66.kowan_if=$(uci get network.wan.ifname)
uci set network.lan.ip6addr=fc00:0101:0101::1/64
uci set system.led_wan.mode='link tx'
uci set network.wan.proto=static
uci set network.wan.dns='202.38.193.33 202.112.17.33'
uci set network.wan.netmask=255.255.255.0
uci delete network.globals
uci commit network
uci commit system
sed -i '/assign/'d /etc/config/network
sed -i '/orig/'d /etc/config/network
sed -i '5,15d' /etc/rc.local
exit 0
       上面的rc.local中的行数不能变化,sed -i '5,15d'/etc/rc.local会删除rc.local中的5至15行的指令。(以上均是华南理工大学V4/V6双栈网络配置环境所用,其他高校请自行修改)
最后删掉之前第一次编译生成的在./trunk/bin/下的文件,再次make V=99
    如果在路由ping ipv6.google.com显示bad address,请用ifconfig命令检查wan口的ipv6地址,设置是否正确,或者删除除了定义wan口ipv6地址之外的ipv6相关参数再试试;在电脑不用路由上网情况下,cmd中运行tracert ipv6.google.com,第一跳地址就是了。












本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

评分

参与人数 1恩山币 +1 收起 理由
chant*** + 1 当心我用iPhone X 砸死你

查看全部评分

来自手机 | 显示全部楼层
这个要支持
回复

使用道具 举报

新生成的镜像会默认放在新建的一个bin目录下。例如:/bin/brcm63xx/
       如果不清理编译产生的文件,下次编译时可能会造成冲突,执行make clean。在执行clean命令,确保已经将编译好的image进行了备份。清理工作会清楚b
回复

使用道具 举报

很好的教程,之前自己弄不成功
回复

使用道具 举报

 楼主| | 显示全部楼层
jiyif 发表于 2013-6-13 13:57
新生成的镜像会默认放在新建的一个bin目录下。例如:/bin/brcm63xx/
       如果不清理编译产生的文件,下 ...

我其实基本不对源文件修改,只是对预编译文件修改,所以都是make之后再进行的,这样不怕源文件自己的md5检测,当然如果你到源文件那里修改也可以,这样一劳永逸了
回复

使用道具 举报

楼主不厚道,看看还要回复
回复

使用道具 举报

这个东西不错呵呵
回复

使用道具 举报

我来看看啦。。
回复

使用道具 举报

回复可看。
回复

使用道具 举报

这个东西不错!看看!
回复

使用道具 举报

linux内核从3.8开始就支持ipv6的nat了
回复

使用道具 举报

 楼主| | 显示全部楼层
wsgtrsys 发表于 2013-7-9 22:45
linux内核从3.8开始就支持ipv6的nat了

但是现在为止,在openwrt官网的wiki并没有更新教程,最新的trunk也没有ipv6 nat的踪迹
回复

使用道具 举报

这个要支持
回复

使用道具 举报

最新trunk已经默认支持ipv6了,6relayd完美搞定,这个napt66编译既麻烦也不好用
回复

使用道具 举报

 楼主| | 显示全部楼层
wiwian 发表于 2013-8-12 23:55
最新trunk已经默认支持ipv6了,6relayd完美搞定,这个napt66编译既麻烦也不好用

我所在学校不支持邻居发现代理,只好用这个方法了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /1 下一条

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-5-13 20:20

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表