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_exit
5.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起了作用,我也不知道。