首页 > 网络 > 关于open-wrt下实现vpn客户端以及带动电脑从vpn上网的笔记

关于open-wrt下实现vpn客户端以及带动电脑从vpn上网的笔记

2007年6月3日

以下内容我是在Linksys WRT54G v2.0上实践的
安装open-wrt的主要文字可以看http://wiki.openwrt.org/OpenWrtDocs
首先当然是把它本来带的firmware刷成open-wrt,我用的是openwrt-wrt54g-squashfs.bin
我刷的方法是在他本来的web页面上上传的,其实保险起见应该把boot_wait开启,再这样做,但是web界面版本太新,我用了各种方法也没成功,就直接刷了,好在没失败。
然后要装一个webif^2(webif_latest_stable.ipk),因为本来自带的web页面功能太弱了。
基本设置我就不提了,然后就是安装一些与vpn有关的包,如下:

kmod-crypto_2.4.30-brcm-5_mipsel.ipk
kmod-mppe_2.4.30-brcm-5_mipsel.ipk
kmod-tun_2.4.30-brcm-5_mipsel.ipk
liblzo_2.02-1_mipsel.ipk
libopenssl_0.9.8d-1_mipsel.ipk
openvpn_2.0.9-1_mipsel.ipk
pptpd_1.3.0-1_mipsel.ipk

这些包我是装了cygwin,用scp命令传到路由上的。open-wrt默认是不带sftp的
pptp本身和普通电脑没什么区别,这里先介绍一open-wrt中与这部分相关的配置文件及脚本

在/etc/ppp/目录下,有peers.pptp和users.pptp两个文件,这是web界面下对pptp进行设置时保存的文件。
在/etc/init.d/
目录就下就启动时的脚本啦,有关的包括S35firewall, S90pptp,
S95custom-user-startup.其中S35firewall里就是很多iptables的命令,路由的设置主要就是由它决定的啦,
S35firewall还会调用到/etc/firewall.user,这里是由用户自行添加iptables命令的地方,不过我还是直接改动
S35firewall本身。
S90pptp则是启动VPN客户端的地方啦,它会按/etc/ppp/peers.pptp中的列表依次启动
VPN,这里有个功能让我耽误了好久。就是路由在启动的时候会根据上面提到的peers.pptp和users.pptp自动生成/etc/chap-
secrets和/etc/ppp/peers下的各文件,所以说你如果直接改动这些文件,下次启动时就又会被自动生成的文件内容覆盖,所以我只得把自己
编辑的上述配置文件存在/jffs下,然后在S90pptp启动VPN语句之前将他们cp到他们本应在的位置。路由自动生成的配置文件里要求mppe,我
把这一点给去掉了,我的pptp:XXXX如下:

pty “pptp 162.105.123.123 –nolaunchpppd”
#mppe required,stateless
name loudly
remotename vpn123
#file /etc/ppp/options.pptp
ipparam pptp:XXXX

usepeerdns

# do not require the server to authenticate to our client
noauth

lock
#noauth
refuse-eap
#refuse-chap
#refuse-mschap
nobsdcomp
#nodeflate

persist

另外,由于我要指定客户端的IP,还要改一下S90pptp中启动vpn的命令,也就是第一个循环中的runppp $peer那句,我改成了只针对XXXX的:

if [ $peer = BDWM ]; then
    pppd call pptp:XXXX 192.168.123.66: updetach
else
    runppp $peer
fi

至此,与vpn有关的部分就写完了

再说一下关于iptables的设置。
首先要设好路由,确定路由上接的电脑访问哪些地址直接走WAN口,哪些走vpn,这些设置可以写在S95custom-user-startup中,这里就不用帖出例子了。路由设好后,先在路由的shell下用wget试试对不对。
然后就是改S35firewall文件:
首先,为了允许转发从vpn走的包,在### FORWARDING段加入下面这行:

iptables -A FORWARD -i $LAN -o ppp0 -j ACCEPT

然后,再设置一下在vpn这条路径上的nat,在### MASQ段添加如下:

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

最后的问题就是vpn是在S90中才建立的,S35执行时还没有ppp0呢,所以我把S35firewall改成S91firewall,就OK了。

然后把路由电源拔掉,再插上,让他全自动地执行一下上面的操作,看看能不能正常,bless~~~~
PS:vpn连不上时看log很重要,客户端及服务器端都要看,open-wrt的syslogd默认情况下是不写/var/log/messages文件的,要在www界面下的log页面中设一下让它这样做。

网络 , ,

  1. SuperLove
    2007年6月9日14:44 | #1

    你太油菜了!

  2. loudly
    2007年6月23日01:44 | #2

    ft,你竟然会跑这里来

  3. zikki
    2007年6月29日22:35 | #3

    好专业的blog……雾水中…

  1. 目前还没有任何 trackbacks 和 pingbacks.