红联Linux门户
Linux帮助
当前位置: 红联Linux门户 > SuSE

SUSE笔记:在Linux下实现PPTP VPN拔号

发布时间:2008-03-20 21:05:30来源:红联作者:Dndr
1. PPTP VPN 客户端软件

我使用的PPTP客户端软件的名称就叫作“PPTP Client”。
软件的主页是 http://pptpclient.sourceforge.net/

2、安装

源代码编译安装,这样干净利索。

shell> tar pptp-1.7.1.tar.gz
shell> cd pptp-1.7.1
shell> more INSTALL
...
shell> make
shell> make install
shell> cp /usr/share/doc/packages/ppp/scripts/pon /usr/sbin
shell> cp /usr/share/doc/packages/ppp/scripts/poff /usr/sbin
shell> chmod +x /usr/sbin/pon /usr/sbin/poff

安装前看看INSTALL和README是个好习惯。
pon和poff命令可在ppp源码目录下的scripts目录中找到(find /usr/share -name pon)。


3、建立拔号连接

长话短说吧,我选择在命令行下直接配置拔号连接,而没有采用图形工具配置。因为图形配置工具需要单独安装,我们的基本目标是建立PPTP连接,而它并不是决定能否成功的关键因素。


环境描述:

PPTP-Server.IP: 202.202.202.202
Client.IP: 10.10.10.10/24
Client.Gateway: 10.10.10.1
Client.Hostname: dream

pptp.uid: jack
pptp.pwd: rose

pptp.dial-name: titanic



配置描述:

默认情况下,pptp client 1.7.1 安装后的配置文件存放在 /etc/ppp 目录中。


3.1 设置拔号使用的用户名和口令

编辑/etc/ppp/chap-secrets或/etc/ppp/pap-secrets,加入以下内容
"jack" "titanic" "rose" *
"titanic" "jack" "rose" *

chap-secrets和pap-secrets分别在什么情况下使用呢?
默认情况的PPTP认证都会使用ms-chap或ms-chap2,这时使用chap-secrets。
但如果PPTP VPN服务器配置了radius等认证就会采用pap认证模式,这时使用pap-secrets。


3.2 创建拔号使用的连接文件(profile)

shell> touch /etc/ppp/peers/titanic
shell> vi /etc/ppp/peers/titanic
pty "pptp 202.202.202.202 --nolaunchpppd"
name jack
remotename titanic
file /etc/ppp/options.pptp
ipparam connect



4、拔号

需要以root身份执行

shell> /usr/sbin/pon titanic &
[1] 5065
dream:shell # Using interface ppp0
Connect: ppp0 <--> /dev/pts/2
CHAP authentication succeeded
local IP address 192.168.0.236
remote IP address 192.168.0.129
Script /etc/ppp/ip-up finished (pid 5078), status = 0x0

shell>

上面的提示信息基本表明PPTP拔号成功,根据提示信息检查一下ppp0的状态:

shell> ifconfig ppp0
ppp0 Link encap:Point-to-Point Protocol
inet addr:192.168.0.236 P-t-P:192.168.0.129 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:12 errors:0 dropped:0 overruns:0 frame:0
TX packets:9 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:199 (199.0 b) TX bytes:97 (97.0 b)

shell>

OK,PPTP拔号成功。



5、设置路由

a) 将pptp server的IP指向本地网关,以保证在路由发生变化时pptp连接不被中断
shell> route add -host 202.202.202.202 gw 10.10.10.1

b) 删除默认路由
shell> route del -net 0.0.0.0

c) 将默认路由指向pptp连接
shell> route add default ppp0


OK,现在可以尽情访问网络了。



6、断开拔号连接

shell> /usr/sbin/poff



7、小结

我没有仔细介绍每条命令的含义,但相信只要按照上面步骤操作,可以成功地建立PPTP拔号连接。



8、一个拔pptp vpn的脚本,设计的初衷是为了满足公司RSA动态口令认证密码录入的问题,很简陋。

引用:
#!/bin/sh

echo
echo "*************************************************************************"
echo "* usage: -f connection_file -u pptp_username -p pptp_password *"
echo "*************************************************************************"
echo

# get parameter
while getopts ":f:u:p:" opt; do
case $opt in
"f") conn_file="$OPTARG" ;;
"u") user_id="$OPTARG" ;;
"p") user_pwd="$OPTARG" ;;
esac
done

if [ -z "$EUID" -a -x /usr/bin/id ]; then
EUID=`id -u`
fi

if [ "$EUID" = "0" ]; then

secrets_file="/etc/ppp/pap-secrets"
pincode="********"
user_pwd="$pincode$user_pwd"

echo "# Secrets for authentication using PAP" > $secrets_file
echo "# client server secret IP addresses" >> $secrets_file
echo "\"$user_id\" \"$conn_file\" \"$user_pwd\" *" >> $secrets_file
echo "\"$conn_file\" \"$user_id\" \"$user_pwd\" *" >> $secrets_file

/sbin/ifconfig ppp0 > /dev/null 2>&1
if [ "$?" = "0" ]; then
echo "*** pptp is alreay established, now disconnect it ... ***"
echo
/sbin/ifconfig ppp0
/usr/sbin/poff -a
fi

echo
echo "*** Connecting $conn_file ... ***"
echo
/usr/sbin/pon $conn_file &
echo "."
/bin/sleep 1
echo ".."
/bin/sleep 1
echo "..."
/bin/sleep 1
echo "...."
/bin/sleep 1
echo "....."
/bin/sleep 1
/sbin/ifconfig ppp0 > /dev/null 2>&1
if [ "$?" = "0" ]; then
/sbin/ifconfig ppp0
echo
echo "*** PPTP VPN $conn_file is established! ***"
echo
exit 0
fi

else

echo "PPTP Client: Permission denied"
echo
exit 1

fi
文章评论

共有 1 条评论

  1. ljp50598313 于 2009-09-28 14:11:09发表:

    那你有没有在REDHAT下用ADSL动态IP地址做网络对网络VPN的方案嘛,共享一下嘛