1.pptpd的安装很简单,无非是
zypper in pptpd
然后是配置
2.编辑pptpd的主配置文件/etc/pptpd.conf,我的内容是
speed 115200 option /etc/ppp/options localip 192.168.0.1 remoteip 192.168.0.100-199 pidfile /var/run/pptpd.pid
注意option,原来的配置文件指向了一个不存在的文件。
3.编辑/etc/ppp/chap-secrets,这个文件保存了用户名和密码,格式是
#client hostname <password> 192.168.1.1 usr pptpd <password> *
注意hostname,我不太明白这选项是干嘛的,似乎指的是服务器的主机名。
4.编辑/etc/ppp/options,这是主要的选项
name pptpd noipdefault crtscts lock modem asyncmap 0 nodetach lcp-echo-interval 30 lcp-echo-failure 4 lcp-max-configure 60 lcp-restart 2 idle 600 noipx file /etc/ppp/filters ms-dns 208.67.222.222 ms-dns 208.67.222.220 require-mschap-v2 require-mppe-128 logfile /var/log/pptpd.log
按照我的理解,其中:
- name标示了server的主机名,如果这个主机名跟chap-secrets 中的不同,client是连不上的,可以检查/var/log/messages看看
- require-mschap-v2 和 require-mppe-128 表示server使用的验证方式
- logfile /var/log/pptpd.log 这个默认是没有的,我不确定这个是不是运行server必须的。
4.启动pptpd
chkconfig pptpd on service pptpd start
如果你用的是linode的主机,是不是看到提示说kernel module not found?
这是因为linode把所有模块都编译进内核了,你会发现modprobe -l 的结果是空的
解决方法很简单,修改/etc/init.d/pptpd,注释掉modprobe 和 rmmod,如下:
#!/bin/sh
# Copyright (c) 2000-2001 SuSE GmbH Nuernberg, Germany. All rights reserved.
#
# Author: Bernd Kaindl
#
# /etc/init.d/pptpd
#
### BEGIN INIT INFO
# Provides: pptpd
# Required-Start: $remote_fs $network
# Required-Stop: $remote_fs $network
# Default-Start: 3 5
# Default-Stop:
# Description: start pptp daemon
# Short-Description: pptp daemon
### END INIT INFO
PPTPD_BIN=/usr/sbin/pptpd
test -x $PPTPD_BIN || exit 5
# Shell functions sourced from /etc/rc.status:
. /etc/rc.status
# First reset status of this service
rc_reset
case "$1" in
start)
echo -n "Starting MS VPN server pptpd"
#if modprobe ppp_mppe ; then
startproc -sq $PPTPD_BIN
rc_status -v
#else
# rc_failed 3
#fi
;;
stop)
echo -n "Shutting down MS VPN server pptpd"
killproc -TERM $PPTPD_BIN
rc_status -v
#rmmod ppp_mppe > /dev/null 2>&1
;;
restart)
$0 stop
$0 start
rc_status
;;
force-reload)
$0 stop && $0 start
rc_status
;;
reload)
rc_failed 3
rc_status -v
;;
status)
echo -n "Checking for MS VPN server pptpd: "
checkproc $PPTPD_BIN
rc_status -v
;;
*)
echo "Usage: $0 {start|stop|status|restart|force-reload|reload}"
exit 1
;;
esac
rc_exit5.nat
在其他发行版里面很简单
/sbin/iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASQUERADE
可是suse的iptables比较怪,用SuSE firewall管理的,这是我在hjb同学的帮助下研究出来的一种能工作的方法:
- yast firewall,在interfaces那个地方添加(custom)一项:在internal zone那里填入any,其余2个选项留空。
- 在Masquerading那里,把Masquerade Network勾上,保存退出
- vim /etc/sysconfig/SuSEfirewall2, 把其中一个选项改成:FW_CUSTOMRULES=”/etc/sysconfig/scripts/SuSEfirewall2-custom”
- vim /etc/sysconfig/scripts/SuSEfirewall2-custom,在一个合适的地方加入:iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASQUERADE。哪里是合适的地方?我也不知道,我写到fw_custom_before_masq的大括号里面了。
- rcSuSEfirewall2 restart
至于到底是哪些步骤起了作用,我也不知道。
6.可能的问题
如果顺利的话,到这个地方client应该就能连上来了。可是我的vm和vps都连不上来,在执行了zypper up;reboot以后,突然就可以了。到底是update还是reboot起了作用,我也不知道。