在linode opensuse 11.3上配置pptpd

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同学的帮助下研究出来的一种能工作的方法:

  1. yast firewall,在interfaces那个地方添加(custom)一项:在internal zone那里填入any,其余2个选项留空。
  2. 在Masquerading那里,把Masquerade Network勾上,保存退出
  3. vim /etc/sysconfig/SuSEfirewall2, 把其中一个选项改成:FW_CUSTOMRULES=”/etc/sysconfig/scripts/SuSEfirewall2-custom”
  4. 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的大括号里面了。
  5. rcSuSEfirewall2 restart

至于到底是哪些步骤起了作用,我也不知道。

6.可能的问题
如果顺利的话,到这个地方client应该就能连上来了。可是我的vm和vps都连不上来,在执行了zypper up;reboot以后,突然就可以了。到底是update还是reboot起了作用,我也不知道。

updatedupdated2022-02-222022-02-22