分类目录归档:网络

对各种网络问题的研究

启用了Nginx作Luci的SSL前台

最近自己重新做固件嗯,因为某些癖好(算是吧,因为太钟爱于https了),一直在启用luci的https,可是不知道为什么,uhttpd的TLS插件无法启用,于是蛋疼了,我擦嘞,不了个是吧,不带这样玩啊…

于是只能启用不安全的uhttpd,让我一阵纠结,心里总是没有安全感…

一晃打开了transmission-web,突然想起了以前看到过的一个老外写的blog,说想远程管理transmission,但是transmission又没有密码保护(现在的版本好像有了),于是就用个nginx做前端,加上密码认证,就可以避免别人过来搞东搞西了。

这给了我启发,为什么不用nginx做SSL的前端呢?效果是一样的啊,顺带transmission的远端管理也可以做了,一举双得。

于是我动手了

首先是重新编译了一次nginx,因为官方编译的nginx没有包含ssl支持

然后启动了普通版的uhttpd,开始监听之后,修改nginx的配置,打开ssl支持,加上证书个密钥(因为用的是以前的证书,所以不用重新签),再写个proxy_pass(这个似乎有点问题,如果写到了location /path/ 中之后出现了问题,似乎是东西显示不完全,格式有点乱,后来写到 location / 中就没有问题了)

顺便把transmission的web管理加上,reload一次之后就完全没问题了。除了载入速度略有下降(transmission的web管理速度慢了稍微有点多)

附上一下配置文件

server {
listen 443;
server_name Router;

charset utf8;

ssl on;
ssl_certificate /etc/ssl/CA/keys/luci_school.crt;
ssl_certificate_key /etc/ssl/CA/keys/luci.key;

ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

location / {
proxy_pass ;
proxy_redirect default;
}
location /transmission {
proxy_pass ;
proxy_redirect default;
}
}

自己重新做了个固件,刷上之后发现终于能看到中文了

这个缺陷的话其实是busybox弄出来的,之前的版本还是支持的,后来就突然看不到了,全部变成了“?”,看得我略纠结。

之后自己做过两个固件,在busybox的选项里面有补丁的支持,可以支持更多的字符,结果后来自己再做的时候,还是看不见中文,变成了一个“˿”

我就纠结了,我擦嘞,怎么变成这个样子……

最后觉得可能是支持的问题,支持的字符数本来就不足,于是稍微一狠心,将767改了,改成了126735(真的变大了很多啊),结果就成功了。

Busybox编译截图

Busybox编译截图

 

或许支持的字符少一点可以减少busybox的体积,但是支持性实在不好啊

[转载]用debootstrap在openwrt上安装debian squeeze,构建编译环境

来源:http://www.openwrt.org.cn/bbs/forum.php?mod=viewthread&tid=2801&highlight=debootstrap

用到的相关软件:
debootstrap binutils objdump libbfd
1、opkg 安装 objdump
因为debootstrap安装debian时,需要用的dpkg或者ar来解包deb软件包,考虑到dpkg安装需要的空间较大,转用ar,而ar在binutils软件包中,ar的运行需要libbfd库支持。因此先安装objdump,连支持库libbfd也安装了
root@OpenWrt:~#opkg update
root@OpenWrt:~#opkg install objdump
2、解包binutils,获得ar可执行文件
opkg安装binutils需要6M多的空间,而我们只需要其中一个ar,所以我只解包取出其中的ar文件
root@OpenWrt:~#mkdir /mnt/sda1/temp
root@OpenWrt:~#cd /mnt/sda1/temp

wget取得binutils_2.19.1-3_brcm63xx.ipk

root@OpenWrt:/mnt/sda1/temp# wget … 19.1-3_brcm63xx.ipk

解包binutils_2.19.1-3_brcm63xx.ipk (ipk包实际只是个tgz包,可以用tar解开)

root@OpenWrt:/mnt/sda1/temp# tar zxvf binutils_2.19.1-3_brcm63xx.ipk

解包 data.tar.gz ,获得ar

root@OpenWrt:/mnt/sda1/temp# tar zxvf data.tar.gz

解开后,当前目录usr里面有bin mips-openwrt-linux-uclibc/bin两层目录,里面都有ar,我用了mips-openwrt-linux-uclibc/bin/ar

复制ar到/usr/bin里

root@OpenWrt:/cp usr/mips-openwrt-linux-uclibc/bin/ar /usr/bin

试试ar能否执行

root@OpenWrt:/mnt/sda1/temp# ar
Usage: ar [emulation options] [-]{dmpqrstx}[abcfilNoPsSuvV] [member-name] [count] archive-file file…
ar -M [<mri-script]
commands:
ar 搞掂了
3、安装debootstrap
debootstrap在RC-4的源上有,需要修改opkg设置
root@OpenWrt:/vi /etc/opkg.conf
###将源修改为下面地址,保存
src/gz packages … 4/brcm63xx/packages
###安装debootstrap
root@OpenWrt:/opkg updat
root@OpenWrt:/opkg install debootstrap
###安装完后,最好修改原来的源地址设置。
4、安装debian
root@OpenWrt:~# mkdir /mnt/sda1/debian_mips
root@OpenWrt:~# debootstrap –arch=mips –variant=minbase squeeze /mnt/work/debian/ http://ftp.cn.debian.org/debian/

*注:如果遇到没有device.tar.gz,下载devices.tar.gz

###等等等。。。。。若干十分钟后,安装完成后,就有了一个debain了。
5、chroot进行debian
root@OpenWrt:~#mount -o bind /proc /mnt/sda1/debian_mips/proc
root@OpenWrt:~#mount -o bind /dev /mnt/sda1/debian_mips/dev
root@OpenWrt:~#chroot /mnt/sda1/debian_mips /bin/bash
###chroot后,apt-get update,mount磁盘。。。等等等等,之后的事情,就看你的需要了。。。exit退回openwrt环境。

[笔记]当make kernel_menuconfig遇到”…/.quilt_checked] Error 1″

前阵子因为发生了某些很让人蛋疼的事情,因为想在Openwrt上跑Debian,所以去照着教程做了一遍,发现以下很严重的问题,参见这里的#2,发现原来一直以来chroot到debian的时候总卡在一半,然后CPU满满的问题不是我的设定的问题或是什么东西没有做,而是官方编译的缺陷。所以不得不手动编译一个出来……

然后就开始了我的折腾之旅。

嘛~

make menuconfig

的话慢慢查,只要仔细看的话很容易都弄懂。

不过在

make kernel_menuconfig

的时候出了点小问题,总是出现一个错误

make[1]: Entering directory `/home/openwrt/trunk/target/linux'
make[2]: Entering directory `/home/openwrt/trunk/target/linux/ar71xx'
if [ -s "/home/openwrt/trunk/build_dir/linux-ar71xx_generic/linux-3.3.3/patches/series" ]; then (cd "/home/openwrt/trunk/build_dir/linux-ar71xx_generic/linux-3.3.3"; if quilt --quiltrc=- next >/dev/null 2>&1; then quilt --quiltrc=- push -a; else quilt --quiltrc=- top >/dev/null 2>&1; fi ); fi
make[2]: *** [/home/openwrt/trunk/build_dir/linux-ar71xx_generic/linux-3.3.3/.quilt_checked] Error 1
make[2]: Leaving directory `/home/openwrt/trunk/target/linux/ar71xx'
make[1]: *** [menuconfig] Error 2
make[1]: Leaving directory `/home/openwrt/trunk/target/linux'
make: *** [kernel_menuconfig] 错误 2

总是出现这个问题让我一阵纠结啊

然后再官方的ticket找到了答案…… 原来是没有安装quilt。

装上quilt之后,再

make ./tools/compile
make ./tools/install

就可以编译kernel选项了

[笔记]Virtualbox的磁盘格式转换

最近开始自己动手编译openwrt的固件,因为总有时忘记选择编译出vdi的固件,所以得到的都是img格式的,不能直接用在Virtualbox上。

稍微上网找了一下,资料也算相当多,只不过每次都要搜索的话略麻烦了点,于是在这里做一下记录

VBoxManage.exe convertfromraw -format VDI path\?.img path\?.vdi

就变成vdi格式的硬盘了。

 

openwrt挂载移动硬盘(ntfs篇)

最近把移动硬盘插到了路由上,开始玩samba,可是遇到了一个不大不小的问题,硬盘挂载似乎有点问题。

使用默认的mount支持的话,ntfs分区的挂载是只读挂载,这就麻烦了,我可不想老是手动挂载啊。而且如果只是只读的话那是相当的没意思啊。于是稍微上网找了一下相关资料。
挂载点
嗯,最简单的一种方法,就是安装软件包“ntfs-3g”。安装完之后,会说注册了新的文件系统“ntfs-3g”。然后,进入luci,找到挂载点,修改详细,文件系统选择“自定义”,然后输入“ntfs-3g”,然后挂载。挂载出来的就是可读的,在samba上浏览也没有乱码的问题。

相当的简单却又有效的方法啊。

在OpenWrt上部署OpenVPN服务器

话说这标题意外的微妙呢……其实相当一段时间之前就已经弄好的,只是最新更新了trunk的固件,决定重新写一次而已。

在部署的过程中经历了不少曲折,可是最后终究还是做好了。还是外国人的东西靠谱,找到的几分中文教程里面的配置文件完全不给力啊,最后还是在官方Wiki里面找到能用的教程。

http://wiki.openwrt.org/doc/howto/vpn.openvpn

真是一份优秀的教程啊,其他平台的部署也可以略作参考。

下面是咱的人手翻译,说是这样说,其实也只是把大部分的命令弄过来而已……

—————————————–首先是服务器的配置————————————–

首先是安装软件包

opkg update
opkg install openvpn openvpn-easy-rsa

然后是稍微改一下easy-rsa的配置文件(不过如果你对手动签署证书比较熟悉的话也可以手动)

vi /etc/easy-rsa/vars

在文件底部添加环境变量

export KEY_COUNTRY="US"
export KEY_PROVINCE="TX"
export KEY_CITY="Houston"
export KEY_ORG="My Cool Place"

接着是签署证书,一共3份,根证书,服务器证书,客户证书。签署的过程需要填写一些信息,自己看着填,详细可以参考这个里面的说明
根证书

clean-all
build-ca
build-dh

服务器证书

build-key-server server

客户证书

build-key Jimmy
build-key Sara
build-key Soandso
...

将CA证书,服务器证书,dh密钥,服务器私钥拷贝到openvpn文件夹

cd /etc/easy-rsa/keys
cp ca.crt ca.key dh1024.pem server.crt server.key /etc/openvpn/

接着,把CA证书,客户端证书,dh密钥,客户端私钥拷贝到客户端。

然后,在luci(还是要有图形界面啊)的网络-接口-LAN里面,把tap0加到桥接里面,然后就不需要考虑转发啊什么的了,方便的很。

guide.openvpn.inttab

guide.openvpn.tapbridge

下面是server的配置文件,这个写在/etc/config/openvpn

config 'openvpn' 'lan'
        option 'enable' '1'
        option 'port' '1194'
        option 'proto' 'udp'
        option 'dev' 'tun0'
        option 'ca' '/etc/openvpn/ca.crt'
        option 'cert' '/etc/openvpn/server.crt'
        option 'key' '/etc/openvpn/server.key'
        option 'dh' '/etc/openvpn/dh1024.pem'
        option 'ifconfig_pool_persist' '/tmp/ipp.txt'
        option 'keepalive' '10 120'
        option 'comp_lzo' '1'
        option 'persist_key' '1'
        option 'persist_tun' '1'
        option 'status' '/tmp/openvpn-status.log'
        option 'verb' '3'
        option 'server_bridge' '192.168.1.1 255.255.255.0 192.168.1.200 192.168.1.219'

接着是防火墙啊,dhcp啊之类的,默认就可以了。

再贴一个通用版本的config,这个可以直接用openvpn来运行而不必依靠luci

port 1194
proto tcp
dev tun

### Certificate and key files
ca /etc/easy-rsa/keys/ca.crt
cert /etc/easy-rsa/keys/server.crt
key /etc/easy-rsa/keys/server.key
dh /etc/easy-rsa/keys/dh1024.pem

server 192.168.30.0 255.255.255.0
push "route 0.0.0.0 0.0.0.0"
push "dhcp-option DNS 10.1.254.250" # Change this to your router's LAN IP Address
client-to-client

### (optional) compression (Can be slow)
comp-lzo
persist-key
persist-tun

verb 3
keepalive 10 120

————————————————–接下来是客户端(OpenWrt)—————————————

配置文件:

client
tls-client
dev tun
proto tcp

remote <server address> 1194 # 改成服务器的IP
resolv-retry infinite
nobind

persist-tun
persist-key

ca ca.crt #CA证书,可以改成绝对路径,下同
cert Jimmy.crt
key Jimmy.key
dh dh1024.pem

comp-lzo
verb 3

然后可以用

openvpn --config 配置文件 --daemon

运行客户连接

另外原文还有Windows版的Client配置文件,有兴趣的可以过去看看。

因权限造成lighttpd无法启动

最近不知道为什么lighttpd又跑不动了(当然不是VPS上的,而是路由上的) ,运行

lighttpd -f /etc/lighttpd/lighttpd.conf -D

得到了下面这堆奇怪的结果

2012-3-20 13:55:54: (log.c.172) server started
2012-3-20 13:55:54: (mod_fastcgi.c.1087) the fastcgi-backend /usr/bin/php-fcgi failed to start:
2012-3-20 13:55:54: (mod_fastcgi.c.1091) child exited with status 13 /usr/bin/php-fcgi
2012-3-20 13:55:54: (mod_fastcgi.c.1094) If you're trying to run your app as a FastCGI backend, make sure you're using the FastCGI-enabled version.
If this is PHP on Gentoo, add 'fastcgi' to the USE flags.
2012-3-20 13:55:54: (mod_fastcgi.c.1398) [ERROR]: spawning fcgi failed.
2012-3-20 13:55:54: (server.c.928) Configuration of plugins failed. Going down.

接着就无法启动了……

我擦勒,不带这样玩的啊喂,这种莫名其妙的东西是什么啊,到底是什么问题你说一下啊。不得已,只得在网上不断的搜索,都没有相关的资料……最后从某个英文的网站找到了一个指引(明灯啊!)strace

大概是一个调试的东东,在opkg的info里面的介绍是“A useful diagnostic, instructional, and debugging tool. Allows you to track whatsystem calls a program makes while it is running.”

接着我根据那位大神所说的,运行了一次

strace -ff lighttpd -D -f /etc/lighttpd/lighttpd.conf

结果出来了一大串一大串文字,刷屏了,而且看不到头。不过看到了一个很重要的信息

运行/usr/bin/php-fcgi的时候出现了“permission denied”。嗯?有问题?权限的话是755,应该没问题啊,尝试直接用root来运行lighttpd,报告说不能用root来运行。于是又新建了一个www-data的用户来运行,在用su切换账户的时候发现问题了。这个问题之前也提到过,于是就顺手改了过来。接着切换过去一运行/usr/bin/php-fcgi,没问题了。再运行lighttpd,也没问题了……

这可真蛋疼啊,明明之前的版本都可以直接用其他用户来运行的,现在的话还有自己动手。

proftpd:无法启动

嘛……因为新买了的路由只有trunk版,可是trunk版并没有vsftpd,只有proftpd,这下子麻烦了,又要重新接触一个新的软件……嘛,就稍微研究了一下。

继续上参考:

http://www.deepvps.com/proftpd-failed-to-start.html

——————————————————————————-

愚蠢的proftpd啊,居然连自动分析IP都不能,如果没有在配置文件里面写上IP的话就死活不能启动 (= =b),真是够愚蠢的。

如果出现了

- warning: unable to determine IP address of 'OpenWrt'
- error: no valid servers configured
- Fatal: error processing configuration file '/etc/proftpd.conf'

之类的文字,就在配置文件里面加上服务器的IP吧

DefaultAddress 192.168.11.1

之后就能成功启动了

结果最后发现该死的,编译的时候没有加入语言支持,最后不得不放弃这软件,投入pure-ftpd的怀抱…

su: /bin/sh: Permission denied

嗯,出现这个问题好几次了,于是就稍微记录一下。

参考:http://sunrenen.iteye.com/blog/796187

 

出现这个问题的原因是切换过去的那个账户无法访问某些文件,包括

/
/bin/sh
/lib/ld-***.so

这堆文件都能被访问,问题就没问题了~

chmod 755 /bin /sbin /lib