存档

文章标签 ‘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页面中设一下让它这样做。

网络 , ,

一些关于远程局域网接入、proxyarp的笔记

2007年3月3日

今天实现了把通过VPN拨入的远程主机加到本地的内网。

用了一些时间,其实核心步骤就是这些:

1.首先在本地局域网可与外网相连的边界服务器上建立vpn服务器。要设置服务器端IP与该机接内网的物理网卡所在的地址在同一个网段。还要设置允许客户机自己指定其地址。(具体设置方法详见http://space.loudly.cn/index.php/2/action_viewspace_itemid_77.html

2.开启proxyarp,其作用就是当物理局域网上的其它机器相与远程拨入者通信时,发arp请求,这个vpn服务器会把自己网卡的MAC返回给它,方法如下:

echo 1 > /proc/sys/net/ipv4/conf/eth1/proxy_arp

其中eth1就是指该边界服务器接局域网的网卡

3.要求远程主机设置静态路由,例如route add -net 192.168.1.0/24 ppp0,由于vpn是点到点连接的,虽然地址与局域网是同一个网段,但是还是要加这个路由的。

由上设置后,远程主机与物理局域网上的主机就能互联了,而且不同的远程主机之间也可以互联了。
我又用win2k3在路由与远程访问服务中添加了一个虚拟端口拨到这个linux的服务器上,并用nat带着另一个内网的机器也连到了该局域网,好强大啊。

网络, 运维 , ,

不带MPPE的VPN服务器端及客户端的设置笔记

2007年1月17日

以下内容是在redhat as3上通过的,不带MPPE,所以不用动内核

服务端部分

1.安装新ppp
运行rpm -aq|grep ppp看是不是已经装了ppp,如果是的话卸掉(有依赖关系的也得卸)
rpm -e rp-pppoe-3.5-4.1
rpm -e wvdial-1.53-11
rpm -e ppp-2.4.1-14.1

把ppp-2.4.3.tar.gz解包
./configure;make;make install

2.安装pptpd
把pptpd-1.3.0.tar.gz解包
./configure;make;make install
然后把plugins目录中的pptpd-logwtmp.so拷到/usr/lib/pptpd/下
再把samples目录中的pptpd.conf拷到/etc/下,chap-secrets和options.pptpd拷到/etc/ppp/下

3.设置
vi /etc/pptpd.conf
ppp /usr/local/sbin/pppd            #用上面的编译过程,pppd默认是在这里的
option /etc/ppp/options.pptpd
logwtmp
localip 192.168.1.101-104             #服务器端的IP
remoteip 192.168.1.2-100          #给客户端分配的IP

vi /etc/ppp/options.pptpd
name vpnhost
#下面这段和加密有关,由于我们的前提是不用,所以我全注掉了
# BSD licensed ppp-2.4.2 upstream with MPPE only, kernel module ppp_mppe.o
# {{{
#refuse-pap
#refuse-chap
#refuse-mschap
# Require the peer to authenticate itself using MS-CHAPv2 [Microsoft
# Challenge Handshake Authentication Protocol, Version 2] authentication.
#require-mschap-v2
# Require MPPE 128-bit encryption
# (note that MPPE requires the use of MSCHAP-V2 during authentication)
#require-mppe-128
# }}}
#不过我用了pap认证,下面加上这句
+pap    #也可以写 +chap,这样更安全,相应地,下面所有的pap-secrets文件换成chap-secrets,而文件内容不用变
proxyarp
debug
lock
nobsdcomp
novj
novjccomp
nologfd
#在某个服务器上(内核编了mppe mppc),用如上的配置,连接建立后几乎无法通讯,在上面加上了nodeflate参数后解决
#如果希望允许客户端自行指定自己的IP及服务端的IP,再加上以下内容
ipcp-accept-remote
ipcp-accept-local

vi /etc/ppp/pap-secrets
# client        server  secret          IP add
vpnclient vpnhost        BBB  192.168.1.103
#vpnclient是客户端指定的名字(见下面客户端部分),BBB是密码
#vpnhost就是上面设定的服务端的name,这个也可以写星号
#192.168.1.103是客户端可以使用的IP(是VPN中的内网IP,而不是客户的实际IP),这个也可以是星号

然后运行pptpd就成了,可以看看/var/log/messages的情况是否正常
调试OK以后就可以把上面文件中的那个debug去掉了


客户部分

1.安装ppp
与上面服务端部分相同

2.安装pptp
解包pptp-1.7.0.tar.gz
可能需要编辑一下目录中的Makefile,把里面pppd程序的路径改为实际的值
然后make; make install

3.写配置文件
在/etc/ppp/peers/目录下,建立一个以连接的名称为文件名的文件(例如叫C1),形如下面的:

remotename vpnhost    #用这个这个字段对应上文服务器端设置的name
# name of tunnel, used to name /var/run pid file
linkname WM1
# name of tunnel, passed to ip-up scripts
ipparam WM1
# data stream for pppd to use
pty “pptp 123.123.123.213  –nolaunchpppd”
# domain and username, used to select lines in secrets files
name vpnclient        #这个也要对应服务器端的pap-secrets
usepeerdns
# do not require the server to authenticate to our client
noauth
# adopt defaults from the pptp-linux package
#file /etc/ppp/options.WM1
lock
#由于用了pap,所以这个noauth要注掉
#noauth
refuse-eap
#refuse-chap
#refuse-mschap
nobsdcomp
#nodeflate
#同理,由于不用MPPE,所以上面注掉了一堆

再建立/etc/ppp/pap-secrets,内容与服务器端的是相同的,只是最后一个字段192.168.1.103换成星号

然则现在就可以执行pppd call C1来连接了
不过,为方便起见,建议使用debian带的pon和poff脚本来连接/断开,我已经上传到(http://space.loudly.cn/index.php/2/action_viewspace_itemid_78.html)
如果你想指定IP,就在pppd语句或是pon中相应的语句后面加上参数 客户端IP:主机端IP
例如pppd call C1 192.168.1.109:192.168.1.101

网络, 运维 ,