分类: Work__预览模式: 普通 | 列表
让你的Debian服务器同时支持pptp和12tp服务(buyVM的openVZ测试成功)


前提条件,服务器开启了pptp服务。
如果没有开启pptp请参见文章 《BuyVM Debian系统中安装PPTP VPN (OpenVZ)》 网址http://www.xiejiwu.org/article.asp?id=114

第一步:如果debian系统是新安装的,请升级系统
# apt-get update
# apt-get upgrade
这一步很重要,否则可能期间会产生不可预知的错误!
如果debian没有安装sudo,你还需要执行以下的命令
# apt-get install sudo
如果你对 vi 命令掌握不好,建议安装nano
# apt-get install nano

以下使用的nano命令和vi命令是一个效果,看你喜欢哪个就用哪个!!

第二步:安装 IPSec
IPSec 会对 IP 数据包进行加密和验证。这意味着你的电脑/移动设备与服务器之间传输的数据无法被解密、也不能被伪造。
可以用 openswan 来跑 IPSec。
# sudo aptitude install openswan
目前自动安装后显示版本为2.6.28
可以通过 命令 # ipsec --version 查看
如显示如下
Linux Openswan U2.6.28/K(no kernel code presently loaded)
See `ipsec --copyright' for copyright information.


第三步:用文字编辑器打开 /etc/ipsec.conf
# nano /etc/ipsec.conf

修改成如下内容:
version 2.0
config setup
nat_traversal=yes
virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
oe=off
protostack=netkey

conn  L2TP-PSK-NAT
        rightsubnet=vhost:%priv
        also=L2TP-PSK-noNAT

conn L2TP-PSK-noNAT
        authby=secret
        pfs=no
        auto=add
        keyingtries=3
        rekey=no
        ikelifetime=8h
        keylife=1h
        type=transport
        left=YOUR.SERVER.IP.ADDRESS
        leftprotoport=17/1701
        right=%any
        rightprotoport=17/%any


按ctrl+x键保存数据
提示是否保存 按Y 然后确认即可

这里要注意 倒第四行代码中 YOUR.SERVER.IP.ADDRESS 一定要换成你自己的服务器IP.

这个文件如果是直接拷贝网上的,有可能会出现错误。下面会第七步讲解,注意!


第四步:修改 /etc/ipsec.secrets文件
# nano /etc/ipsec.secrets
修改成如下内容:
YOUR.SERVER.IP.ADDRESS %any: PSK “YourSharedSecret”
注意把your.server.ip.address 替换成你的服务器的IP;把yoursharesecret替换成你自己设定的公共密匙!

12.34.56.78 %any: PSK "ipv6vpn"
注意中间空格,12.34.56.78是服务器IP地址,ipv6vpn为密钥
按ctrl+x键保存数据  按Y 然后确认即可


第五步:挨着运行执行以下的命令

for each in /proc/sys/net/ipv4/conf/*
do
echo 0 > $each/accept_redirects
echo 0 > $each/send_redirects
done


第六步:检查一下 IPSec 能否正常工作

# sudo ipsec verify
结果中你会看到「Opportunistic Encryption Support」被禁用了,其他项 OK 就代表检测通过了!


第七步:重启 openswan
# sudo /etc/init.d/ipsec restart

有时候会出现类似这样的错误
1.failed to start openswan IKE daemon - the following error occured:
2.can not load config '/etc/ipsec.conf': /etc/ipsec.conf:50: syntax error, unexpected KEYWORD, expecting $end [xxxxxxx]
我就与遇见这个错误折磨了3天,这是因为拷贝过去有些代码文本编码有错误。
在第三步配置vi /etc/ipsec.conf文件的时候,每句语法前面需要tab缩进,然后保留空格,否则可能出现启动ipsec错误。
解决办法把前面空格全部删除,然后按一次tab键缩进。
还有中划线(-),可以删除后自己写入一次,也行因为这个字符的原因。
conn L2TP-PSK-NAT 和 conn L2TP-PSK-noNAT 前面可以没空格。


第八步:安装 L2TP / 常用的 L2TP 后台软件包是 xl2tpd

# sudo aptitude install xl2tpd


第九步:修改/etc/xl2tpd/xl2tpd.conf 文件

# nano /etc/xl2tpd/xl2tpd.conf
修改成如下的内容:
[global]
ipsec saref = yes
[lns default]
ip range = 10.10.22.2-10.10.22.255
local ip = 10.10.22.1
;require chap = yes
refuse chap = yes
refuse pap = yes
require authentication = yes
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
按ctrl+x键保存数据

这里
ip range = 10.10.22.2-10.10.22.255
local ip = 10.10.22.1
可以换成你自己的IP段,后面会用到IP段,要记住。


第十步:安装 ppp (这是用来管理 VPN 用户的)

# apt-get install ppp
因为我们已经安装pptp服务了,这个可以省略。
Debian的pptp安装服务参见文章:BuyVM Debian系统中安装PPTP VPN (OpenVZ) 网址http://www.xiejiwu.org/article.asp?id=114


第十一步:检查一下 /etc/ppp 看下ppp目录下面有没有options.xl2tpd这个文件
# ls /etc/ppp
如果没有options.xl2tpd 这个文件,建一个
# nano /etc/ppp/options.xl2tpd
内容如下:
require-mschap-v2
ms-dns 8.8.8.8
ms-dns 8.8.4.4
asyncmap 0
auth
crtscts
lock
hide-password
modem
debug
name l2tpd
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4

注意 ms-dns 两行我填的是Google DNS。
如果你想用其他的 DNS 服务器(例如Open Dns的 208.67.222.222/208.67.220.220),请自行更换。
按ctrl+x键保存数据


第十二步:添加一个VPN 用户。用文字编辑器打开 /etc/ppp/chap-secrets

# nano /etc/ppp/chap-secrets
打开文件之后你会看到如下代码
# user server password ip
这段代码是被#注释起来了的,意思就是按着这个顺序设置账号的相关信息.
user是账户名称;server是l2tpd;password是设置你想要的密码;ip可以设置成*,表示任何IP都可以连接。
如下设置:
test l2tpd 5211314abc *
设置完成后保存退出
因为我们开启了pptp,同时想让这个账户有l2tp权限。
那么我们可以这样写。
test * 5211314abc *
这样这个test账户既能使用pptp也能使用l2tp啦。


第十三步:重启 xl2tpd

# sudo /etc/init.d/xl2tpd restart


第十四步:设置 iptables 的数据包转发

# iptables –table nat –append POSTROUTING –jump MASQUERADE
# echo 1 > /proc/sys/net/ipv4/ip_forward

这里要注意,如果我们开启了pptp后,再执行上面第一行代码
有时候会提示:iptables: No chain/target/match by that name.

这样在测试拨号的时候,发现pptp没有问题,可以拨号成功,也可以访问网站。

但是在测试12tp的时候,能拨号成功,但在win7或win2008拨号面板上显示ipv4无访问网络权限之类的话。
访问服务器的IP可以访问网络服务,而别的网站不行,这说明iptables转发没有成功。
这样就不要执行iptables –table nat –append POSTROUTING –jump MASQUERADE这句话了。

之前设置pptp的时候,做过转发文件,所以这里我们打开当时做pptp时候做的转发文件/etc/pptpdfirewall.sh.
命令为: vi /etc/pptpdfirewall.sh
这时候你会看见上次做pptp服务的时候已经添加了2行代码。
代码是我们上次做pptp服务时候写的,应该如下(192.168.46.0/24为pptp服务使用网段,12.34.56.78为服务器IP):
#pptp
sudo /sbin/iptables -t nat -A POSTROUTING -s 192.168.46.0/24 -j SNAT --to-source  12.34.56.78
sudo /sbin/iptables -A FORWARD -s 192.168.46.0/24 -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j TCPMSS --set-mss 1356

好,现在在这2行代码上面,添加如下代码。
#l2tp
sudo /sbin/iptables -t nat -A POSTROUTING -s 10.10.22.0/24 -j SNAT --to-source 12.34.56.78
sudo /sbin/iptables -A INPUT -p udp -m state --state NEW -m udp --dport 1701 -j ACCEPT
sudo /sbin/iptables -A INPUT -p udp -m state --state NEW -m udp --dport 500 -j ACCEPT
sudo /sbin/iptables -A INPUT -p udp -m state --state NEW -m udp --dport 4500 -j ACCEPT

sudo /sbin/iptables -I FORWARD -s 10.10.22.0/24 -j ACCEPT
sudo /sbin/iptables -I FORWARD -d 10.10.22.0/24 -j ACCEPT

这里注意的是,这里10.10.22.0/24是刚才第九步 /etc/xl2tpd/xl2tpd.conf 里设置的IP段
如果你设置的不一样,请更换成你自己的。12.34.56.78同样必须换成你的服务器的IP。

最终代码显示如下:
#l2tp
sudo /sbin/iptables -t nat -A POSTROUTING -s 10.10.22.0/24 -j SNAT --to-source 12.34.56.78
sudo /sbin/iptables -A INPUT -p udp -m state --state NEW -m udp --dport 1701 -j ACCEPT
sudo /sbin/iptables -A INPUT -p udp -m state --state NEW -m udp --dport 500 -j ACCEPT
sudo /sbin/iptables -A INPUT -p udp -m state --state NEW -m udp --dport 4500 -j ACCEPT

sudo /sbin/iptables -I FORWARD -s 10.10.22.0/24 -j ACCEPT
sudo /sbin/iptables -I FORWARD -d 10.10.22.0/24 -j ACCEPT

#pptp
sudo /sbin/iptables -t nat -A POSTROUTING -s 192.168.46.0/24 -j SNAT --to-source 12.34.56.78
sudo /sbin/iptables -A FORWARD -s 192.168.46.0/24 -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j TCPMSS --set-mss 1356

按退出,然后按:wq!保存以上命令,这步就结束了。


原则上来说,上面步骤应该保持在服务器启动文件里
因为在设置 pptp服务时候,我们已经将sh /etc/pptpdfirewall.sh 代码写过了。
所以这里不用重复了,如果你想检测的话,执行如下命令。
输入命令
chmod 755 /etc/pptpdfirewall.sh
再输入
vi /etc/init.d/rc.local
看文件的最后一行上有没有如下代码。
sh /etc/pptpdfirewall.sh
如果有,那就OK了,如果没有,加进去。



第十五步:为了避免openswan 在服务器重启后无法正常自动,我们可以修改 /etc/rc.local 文件

# nano /etc/rc.local
加入以下的内容:
echo 1 > /proc/sys/net/ipv4/ip_forward
for each in /proc/sys/net/ipv4/conf/*
do
echo 0 > $each/accept_redirects
echo 0 > $each/send_redirects
done
/etc/init.d/ipsec restart
保存退出!

然后 执行命令reboot 重启VPS。
开始测试VPN吧。这样的话,你的服务器就同时兼容pptp和l2tp拨号了。

如果重启后用不了

编辑/etc/rc.local文件
把第一行改成
#!/bin/bash
然后去掉exit 0那行就行了
这个是Debian启动脚本的问题



++++++++++++++++++++++++


可以通过命令检测这里转发配置是否正确了。

iptables --version //这个命令可以查看iptables版本。

iptables -t nat -L //这个命令可以查看转发都有那些。

如我测试显示的结果如下:
# iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination
SNAT       all  --  10.10.22.0/24        anywhere            to:12.34.56.78   //12.34.56.78是设置的服务器的IP
SNAT       all  --  192.168.46.0/24      anywhere            to:12.34.56.78   //12.34.56.78是设置的服务器的IP

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

看到有2个IP段,一个为pptp的 192.168.46.0/24 ,一个为12tp的10.10.22.0/24 ,这样转发就成功啦。


参考文章如下:
http://www.viful.com/in-the-vps-debian-build-on-the-l2tp-notes.html?replytocom=6
http://jiangningguta.blog.163.com/blog/static/200290301201221341759219/
http://blog.c1gstudio.com/archives/1597

查看更多...

分类:Work__ | 固定链接 | 评论: 2827 | 引用: 0 | 查看次数: 85978