标题:WR1041N v2 安装openwrt 出处:Felix021 时间:Tue, 05 Jul 2016 22:31:30 +0000 作者:felix021 地址:https://www.felix021.com/blog/read.php?2161 内容: (懒得看细节的同学直接拉到末尾下载带有shadowsocks的镜像) TP-Link很久没给我的路由器更新固件了,而且它运行一段时间以后就需要重启才能保证wifi正常,这对于家里有基于Wifi的智能设备来说是不能忍的,所以只能折腾了,上OpenWRT吧。 记得09年的时候折腾路由器,WL520GU,刷上了DD-WRT,然后再交叉编译弄了个锐捷的客户端,这样就可以把校园网分享出来用。心血来潮到珞珈山水去翻了一下,当年发的帖子竟然还在Linux版置顶…… 回归正题,1041n的OpenWRT页面在这里: https://wiki.openwrt.org/toh/tp-link/tl-wr1041n 虽然可以从 这里 下载预编译好的镜像,但是不折腾一下感觉不带感,所以参考官方的教程,自定义镜像。 1. 下载 Image Generator 当年玩WL520gu的时候,好辛苦,先得用openwrt的buildroot脚本创建一个交叉编译环境,那个脚本特别不适合中国国情,用wget慢慢下载国外的源……等得我都快崩溃了,于是拉出它的下载连接直接用迅雷下好放进去再启动。现在可好,直接就有现成的环境直接下载,一分钟就搞定了。 具体参考这个页面:https://wiki.openwrt.org/doc/howto/obtain.firmware.generate 正好1041n是ar71xx架构的,照做就好了。 2. 生成image 可惜1041n只有4M的flash,否则我一定把php和python都打进去,这样还能跑起个shadowsocks server。 最后权衡了下,是这么生成的: make image PROFILE=TLWR1041 PACKAGES='luci luci-i18n-base-zh-cn luci-i18n-firewall-zh-cn libev libpolarssl curl' 之所以把 libev 也打进去,主要是想之后可以用shadowsocks-libev,但是编译了一下发现可执行文件竟然 1M+,strip以后也还有两三百KB,还是算了。 如果不用curl的话,可以把libpolarssl和curl去掉,不过好像也没什么其他特别有用的了(或者是pptp?)。curl我是用来请求DnsPod的,这样可以及时把家里的IP刷到某个域名上去。 如果没什么错的话,生成的 image 就是这个了: bin/ar71xx/openwrt-15.05.1-ar71xx-generic-tl-wr1041n-v2-squashfs-factory.bin 3. 升级配置 tp不校验固件,所以直接通过路由器管理页面升级就行了。 升级了以后 telnet 192.168.1.1 登上去,用 passwd 修改root密码,然后就可以ssh登录,或者访问luci http://192.168.1.1 image里面带了中文语言包,登录以后可以在 System -> Language 里面修改成简体中文。 配置PPPoE:打开 网络->接口,点击 WAN 接口的修改,看着配就好了。就那么点东西。 剩下的就是瞎折腾了 4. 创建用户 没什么卵用,弄着玩,这样就可以用另一个用户登录路由器,而且还是通过publickey authentication。 引用 echo 'felix021:*:103:100::/overlay/felix021:/bin/ash' >> /etc/passwd echo 'felix021:*:16831:0:99999:7:::' >> /etc/shadow mkdir -p /overlay/felix021/.ssh cd /overlay/felix021/.ssh echo $PUBKEY >> authorized_keys chmod 600 authorized_keys chown -R felix021:users /overlay/felix021/ ==== UPDATE ==== 还是花了一个晚上折腾了shadowsocks 1 安装SDK 参考:https://wiki.openwrt.org/doc/howto/obtain.firmware.sdk 下载SDK: https://downloads.openwrt.org/chaos_calmer/15.05.1/ar71xx/generic/OpenWrt-SDK-15.05.1-ar71xx-generic_gcc-4.8-linaro_uClibc-0.9.33.2.Linux-x86_64.tar.bz2 $ tar jxf Openwrt-SDK* $ mv Openwrt-SDK* sdk $ cd sdk 2 编译 $ git clone https://github.com/shadowsocks/openwrt-feeds.git package/feeds $ git clone https://github.com/shadowsocks/shadowsocks-libev.git package/shadowsocks-libev # 注@20180524,最新版本会出现编译错误,和libsodium貌似不兼容,建议用 v2.4.7 $ make menuconfig #选中 network 下的 shadowsocks-libev-polarssl $ make package/shadowsocks-libev/compile V=99 编译好的文件位于:./build_dir/target-mips_34kc_uClibc-0.9.33.2/shadowsocks-libev-polarssl/shadowsocks-libev-2.4.7/ipkg-install/usr/bin/ 3 腾出空间(回到Image Builder) 对于4M flash的image来说,openwrt给的空间实在太小了,所以只好打起现有package的主意。翻了一下,ipv6似乎占了比较大的空间,考虑到国内确实用不上ipv6,所以就拿它开刀吧。 参考前面 https://wiki.openwrt.org/doc/howto/obtain.firmware.generate 的 Remove useless files from firmware 修改 Makefile,添加 FILES_REMOVE 选项,并在 files_remove 文件中添加: 引用 /etc/modules.d/20-ipv6 /etc/modules.d/42-ip6tables /etc/modules.d/nf-conntrack6 /etc/modules.d/nf-ipt6 /lib/modules/3.18.23/ip6table_filter.ko /lib/modules/3.18.23/ip6table_mangle.ko /lib/modules/3.18.23/ip6table_raw.ko /lib/modules/3.18.23/ip6_tables.ko /lib/modules/3.18.23/ip6t_REJECT.ko /lib/modules/3.18.23/ipv6.ko /lib/modules/3.18.23/nf_conntrack_ipv6.ko /lib/modules/3.18.23/nf_defrag_ipv6.ko /lib/modules/3.18.23/nf_log_ipv6.ko /lib/modules/3.18.23/nf_reject_ipv6.ko /usr/lib/libip6tc.so /usr/lib/libip6tc.so.0 /usr/lib/libip6tc.so.0.1.0 /usr/lib/opkg/info/ip6tables.control /usr/lib/opkg/info/ip6tables.list /usr/lib/opkg/info/ip6tables.prerm /usr/lib/opkg/info/kmod-ip6tables.control /usr/lib/opkg/info/kmod-ip6tables.list /usr/lib/opkg/info/kmod-ip6tables.postinst-pkg /usr/lib/opkg/info/kmod-ip6tables.prerm /usr/lib/opkg/info/kmod-ipv6.control /usr/lib/opkg/info/kmod-ipv6.list /usr/lib/opkg/info/kmod-ipv6.postinst-pkg /usr/lib/opkg/info/kmod-ipv6.prerm /usr/lib/opkg/info/kmod-nf-ipt6.control /usr/lib/opkg/info/kmod-nf-ipt6.list /usr/lib/opkg/info/kmod-nf-ipt6.postinst-pkg /usr/lib/opkg/info/kmod-nf-ipt6.prerm /usr/lib/opkg/info/libip6tc.control /usr/lib/opkg/info/libip6tc.list /usr/lib/opkg/info/libip6tc.prerm /usr/lib/opkg/info/luci-proto-ipv6.control /usr/lib/opkg/info/luci-proto-ipv6.list /usr/lib/opkg/info/luci-proto-ipv6.prerm /usr/sbin/ip6tables /usr/sbin/ip6tables-restore /usr/sbin/ip6tables-save /lib/netifd/dhcpv6.script /usr/lib/libiptext6.so 4 加入shadowsocks $ mkdir -p files/etc/init.d files/usr/bin $ cp /path/to/ss-server /path/to/ss-local files/usr/bin $ cp /path/to/shadowsocks-libev/openwrt/files/shadowsocks.json files/etc/ss-server $ cp /path/to/shadowsocks-libev/openwrt/files/shadowsocks.init files/etc/init.d/ss-server #修改配置文件路径为 /etc/ss-server,去掉 -b 0.0.0.0 $ cp /path/to/shadowsocks-libev/openwrt/files/shadowsocks.json files/etc/ss-local $ cp /path/to/shadowsocks-libev/openwrt/files/shadowsocks.init files/etc/init.d/ss-local #修改配置文件路径为 /etc/ss-local $ chmod +x files/etc/init.d/* 5 重新生成image make image PROFILE=TLWR1041 PACKAGES='luci luci-i18n-base-zh-cn luci-i18n-firewall-zh-cn libev libpolarssl curl libpthread -kmod-ip6tables -ip6tables -kmod-ipv6 -kmod-nf-ipt6 -luci-proto-ipv6 -libip6tc' FILES=files/ FILES_REMOVE="files_remove" 升级一下新的rom,然后就可以在路由器上启动shadowsocks的server/client了。 在路由器上启动server,配合surge,就变成一个简易VPN了,效果相当赞。 附1:带有shadowsocks的镜像下载地址为 http://pan.baidu.com/s/1bpl9jK7 密码: 7ugp (貌似不加密码很容易失效) 附2:编译好的shadowsocks 点击这里下载文件 Generated by Bo-blog 2.1.0