如何在 DebianUbuntu 服务器上架设 L2TPIPSec VPN

如何在 DebianUbuntu 服务器上架设 L2TPIPSec VPN,第1张

首先解释一个问题:在 iPhone 的 设置介面里(Settings >> General >> Network >> ),你可以看到三个标签:L2TP, PPTP, IPSec。但上面我们又讲本次介绍的 方式叫「L2TP / IPSec」,这两者究竟是什么关系?
这三个标签确实令人混淆,准确的写法应该是:L2TP over IPSec, PPTP, Cisco IPSec。PPTP 跟另外两者关系不大,且大家较为熟悉,暂且不提,L2TP 和 IPSec 的区别如下。
L2TP:一个「包装」协议,本身并不提供加密和验证的功能。
IPSec:在 IP 数据包的层级提供加密和验证功能,确保中间人无法解密或者伪造数据包。
本来,只用 IPSec 就可以实现 ,Mac OS X 和 Linux 都支持。但是 Mac OS X 和 iPhone OS 都推荐使用 L2TP over IPSec,在两者的图形介面上也只能设置这个。L2TP / IPSec 是业界标准,微软也支持。而只用 IPSec 的常见于 Linux-to-Linux 的应用,比如将两个位于不同地区的办公室网络安全地连在一起。这多是固定 IP 路由器到固定 IP 路由器级别的连接,只需保证数据包不被中途截获或者伪造就可以,故使用 L2TP 的意义不大。L2TP / IPSec 主要是实现所谓「Road Warrior」的设置,即用变动的客户端连固定的服务器
Cisco 的 用的也是 IPSec 加密,但那是一套不同于 L2TP 的私有包装协议,用于提供用户管理之类的功能,因此一般都需要用 Cisco 自家的 客户端连接。iPhone / iPad 的 设置介面中的 IPSec 标签里有 Cisco 的标识,就是这个原因。
以下是在 Ubuntu 和 Debian 主机上架设 L2TP / IPSec 的步骤,一共十四步。你需要有服务器的 root 权限(所以 DreamHost, BlueHost, MediaTemple 这些服务供应商帮你把一切打点周到的主机就无缘了),也需要一些基本的 Linux 知识。不然的话,我们还是推荐您找一位比较熟技术的朋友帮忙。
一、安装 IPSec。如上所述,IPSec 会对 IP 数据包进行加密和验证。这意味着你的电脑 / 移动设备与服务器之间传输的数据无法被解密、也不能被伪造。我推荐用 openswan 这个后台软件包来跑 IPSec。
用以下命令安装 openswan:
sudo aptitude install openswan二、用文字编辑器打开 /etc/ipsecconf,改成这样:
version 20
config setup
nat_traversal=yes
virtual_private=%v4:10000/8,%v4:19216800/16,%v4:1721600/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=YOURSERVERIPADDRESS
leftprotoport=17/1701
right=%any
rightprotoport=17/%any三、用文字编辑器打开 /etc/ipsecsecrets,改成这样:
YOURSERVERIPADDRESS %any: PSK "YourSharedSecret"(别忘了把「YOURSERVERIPADDRESS」这部分换成你的服务器的 IP 地址,把「YourSharedSecret」部分换成随便一个字串,例如你喜欢的一句话,等等。)
四、运行以下命令:
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/initd/ipsec restart七、安装 L2TP。常用的 L2TP 后台软件包是 xl2tpd,它和 openswan 是同一帮人写的。
运行以下命令:
sudo aptitude install xl2tpd八、用文字编辑器打开 /etc/xl2tpd/xl2tpdconf,改成这样:
[global]
ipsec saref = yes
[lns default]
ip range = 10122-1012255
local ip = 10121
;require chap = yes
refuse chap = yes
refuse pap = yes
require authentication = yes
ppp debug = yes
pppoptfile = /etc/ppp/optionsxl2tpd
length bit = yes这里要注意的是 ip range 一项里的 IP 地址不能和你正在用的 IP 地址重合,也不可与网络上的其他 IP 地址冲突。
九、安装 ppp。这是用来管理 用户的。
sudo aptitude install ppp十、检查一下 /etc/ppp 目录里有没有 optionsxl2tpd 这个文件,没有的话就建一个,文件内容如下:
require-mschap-v2
ms-dns 20867222222
ms-dns 20867220220
asyncmap 0
auth
crtscts
lock
hide-password
modem
debug
name l2tpd
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4注意 ms-dns 两行我填的是 OpenDNS。如果你想用其他的 DNS 服务器(例如谷歌的公共 DNS),请自行更换。
十一、现在可以添加一个 用户了。用文字编辑器打开 /etc/ppp/chap-secrets:
# user server password ip
test l2tpd testpassword 如果你之前设置过 PPTP ,chap-secrets 文件里可能已经有了其他用户的列表。你只要把 test l2tpd testpassword 这样加到后面即可。
十二、重启 xl2tpd:
sudo /etc/initd/xl2tpd restart十三、设置 iptables 的数据包转发:
iptables --table nat --append POSTROUTING --jump MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward十四、因为某种原因,openswan 在服务器重启后无法正常自动,所以我们可以在 /etc/rclocal 文件里写入如下语句:
iptables --table nat --append POSTROUTING --jump MASQUERADE
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/initd/ipsec restart到这里,设置工作已经基本完成。你可以用 iPhone 或 iPad 试着连一下。记得在「Secret」中填入你在上述第三步里填的 YourSharedSecret。
如果连接成功,上网也没问题的话,恭喜你,大功告成。如果连不上,恐怕还得多做一步。
Ubuntu 910 自带的 openswan 版本是 2622, Debian Lenny 带的版本是 2412。这两个版本的 openswan 都有问题。我们的测试结果表明,2624 版的 openswan 可以在上述两版的 Linux *** 作系统下正常工作。所以如果做完以上十四步还是连不上的话,请考虑从源码编译 openswan 2624

其实各个rate都与服务器的一个参数sv_maxupdaterate 和服务器的运行fps有关。
服务器fps与的意思是,每秒钟,服务器接受和发送用户数据,并进行计算的游戏帧数。这个数可以理解成服务器每秒钟最多可以给每个玩家发
送其他玩家的位置,动作,和接受每个玩家动作的次数。这个值会根据服务器运算量的大小而发生变化。
hlds默认的fps是60.用hl booster等插件可以提高这个值,但会增加对服务器资源的需求。我认为60其实也应该不太够,0017秒的间隔,我
的服务器都用booster定在200。
下面介绍sv_maxupdaterate,这个也是服务器参数,客户端是没有的,这是限制发送给每个玩家最高update速率的值。比如服务器fps是
100,sv_maxupdaterate 是50,对客户端来说,每秒钟最多可以得到的更新就是50次而不是100次。如果这个值高于服务器的fps,那是没有意思的

对于客户端来说,每秒钟得到越多的更新数据,在玩家屏幕上与其他玩家的位置就与服务器里真正的位置更接近。
现在介绍cl_updaterate,是客户端的值了,客户可以根据自己的需要设置,默认值是30,也就是最多每秒从服务器接受更新的次数,或者说是
要求服务器每秒发送更新的次数。最好是设成与服务器sv_maxupdaterate一样,因为我们要得到尽量多的更新来刷新我们屏幕上敌人的位置。
但设比sv_maxupdaterate高是没有用的。(所以我自己的CS16客户端都是设置成100),另外这个值比你的fps_max高或比你显卡能够达到的
fps高也是没有太大的意义,反正显示不出来。
cl_cmdrate
这个也是客户端的值,是每秒钟发送给服务器的客户端动作的值(移动、瞄准、与射击等动作),忘了默认值是多少,我都是设置是30,我想
我每秒钟最多做那么多动作吧(这个值设高了会导致ping升高,再高会出现choke),是否收sv_maxupdaterate限制,俺也不清楚。
解释一下choke,choke与loss不一样,choke是值应该发送给客户或服务器而没有发送出去的数据包,loss是发送了但没有收到。
这个值有很多原因引起,而且一般情况下,不会影响游戏的可 *** 作性(就算是稳定在100)
比较常见的原因是CS服务器管理员的参数调整不正确,服务器配置不对,服务器里还有一个参数是sv_maxrate,很多服务器为了节省带宽,设
置了比较低的sv_maxrate,但却设置一比较高的sv_maxupdaterate,但客户端设置cl_update比较高时,因为sv_maxrate的限制,不购带宽传出
全部足够的数据,导致了choke,同理,如果用户端设置过高的cl_cmdrate,也会因为带宽的限制不能传出全部的数据,也会出现choke
如果你真的很在意choke,首先检查你的cl_rate,默认都是9999也就是9K(与服务器端的sv_maxrate,sv_minirate类似,向服务器传送带宽使用限
制,你1秒钟不可能发送超过7K的数据的,放心好了),

一般情况下,我们只能管理A站点,如果也想管理B站点,这时就需要建立隧道
yum install openswan lsof
禁止重定向
for in /proc/sys/net/ipv4/conf/;
do
echo 0 > $/accept_redirects;
echo 0 > $/send_redirects;
done
修改内核参数启用转发和禁止重定向
vim /etc/sysctlconf
netipv4ip_forward = 1
netipv4confallaccept_redirects = 0
netipv4confallsend_redirects = 0
sysctl –p
放行openswan服务端口和NAT规则
iptables -A INPUT -p udp --dport 500 -j ACCEPT
iptables -A INPUT -p tcp --dport 4500 -j ACCEPT
iptables -A INPUT -p udp --dport 4500 -j ACCEPT
iptables -t nat -A POSTROUTING -s site-A-private-subnet -d site-B-private-subnet -j SNAT --to site-A-Public-IP
修改配置
Site-A Server:
vim /etc/ipsecconf
## general configuration parameters ##
config setup
plutodebug=all
plutostderrlog=/var/log/plutolog
protostack=netkey
nat_traversal=yes
virtual_private=%v4:10000/8,%v4:19216800/16,%v4:1721600/16
## disable opportunistic encryption in Red Hat ##
oe=off
## disable opportunistic encryption in Debian ##
## Note: this is a separate declaration statement ##
include /etc/ipsecd/examples/no_oeconf
## connection definition in Red Hat ##
conn demo-connection-redhat
authby=secret
auto=start
ike=3des-md5
## phase 1 ##
keyexchange=ike
## phase 2 ##
phase2=esp
phase2alg=3des-md5
compress=no
pfs=yes
type=tunnel
left=<siteA-public-IP>
leftsourceip=<siteA-public-IP>
leftsubnet=<siteA-private-subnet>/netmask
## for direct routing ##
leftsubnet=<siteA-public-IP>/32
leftnexthop=%defaultroute
right=<siteB-public-IP>
rightsubnet=<siteB-private-subnet>/netmask
## connection definition in Debian ##
conn demo-connection-debian
authby=secret
auto=start
## phase 1 ##
keyexchange=ike
## phase 2 ##
esp=3des-md5
pfs=yes
type=tunnel
left=<siteA-public-IP>
leftsourceip=<siteA-public-IP>
leftsubnet=<siteA-private-subnet>/netmask
## for direct routing ##
leftsubnet=<siteA-public-IP>/32
leftnexthop=%defaultroute
right=<siteB-public-IP>
rightsubnet=<siteB-private-subnet>/netmask
身份验证可以通过几种不同的方式,此处使用pre-shared方式
vim /etc/ipsecsecrets
siteA-public-IP siteB-public-IP: PSK "pre-shared-key"
## in case of multiple sites ##
siteA-public-IP siteC-public-IP: PSK "corresponding-pre-shared-key"
启动服务和排错
service ipsec restart
chkconfig ipsec on
如果能正常启动,从A端就能ping通B端私网地址
在Site-A Server上ip route 就可以查看相关的路由
[siteB-private-subnet] via [siteA-gateway] dev eth0 src [siteA-public-IP]
default via [siteA-gateway] dev eth0
两边的 Server都配置完成后即可互访私网,其他重要命令:
查看隧道状态
service ipsec status
IPsec running - pluto pid: 20754
pluto pid 20754
1 tunnels up
some eroutes exist
ipsec auto –status
## output truncated ##
000 "demo-connection-debian": myip=<siteA-public-IP>; hisip=unset;
000 "demo-connection-debian": ike_life: 3600s; ipsec_life: 28800s; rekey_margin: 540s; rekey_fuzz: 100%; keyingtries: 0; nat_keepalive: yes
000 "demo-connection-debian": policy: PSK+ENCRYPT+TUNNEL+PFS+UP+IKEv2ALLOW+SAREFTRACK+lKOD+rKOD; prio: 32,28; interface: eth0;
## output truncated ##
000 #184: "demo-connection-debian":500 STATE_QUICK_R2 (IPsec SA established); EVENT_SA_REPLACE in 1653s; newest IPSEC; eroute owner; isakmp#183; idle; import:not set
## output truncated ##
000 #183: "demo-connection-debian":500 STATE_MAIN_I4 (ISAKMP SA established); EVENT_SA_REPLACE in 1093s; newest ISAKMP; lastdpd=-1s(seq in:0 out:0); idle; import:not set
相关日志文件(记录了认证、Key交换信息等,可用于排错):
/var/log/plutolog
注意事项
1运营商可能会屏蔽端口,通过telent命令测试确保运营商允许使用UDP 500, TCP/UDP 4500 端口
2确保防火墙放行相关端口
3确保终端服务器pre-shared密钥是相同的
4遇到NAT问题,尝试使用SNAT 替代MASQUERADING

这是本次更新后cfgpfs文件损坏所造成的,请您将梦幻诛仙目录下的cfgpfs文件删除,打开梦幻诛仙目录下launcher目录的repair文件,然后只选择cfgpfs进行一下检查。其他的文件前面的勾选全去掉就行。不删的话直接用repairexe修复是不行的

建议买付费证书,免费证书的周期比较短,一旦没有及时申请就会使小程序无法使用。

小程序选ssl证书和普通网站选ssl证书是一样的,所有商用SSL证书均可满足小程序的需求,想要便宜点的可以选择RapidSSL这个品牌的证书,这个品牌有一个基础级的dv域名型单域名证书,价格不贵不到两百元,而一个基础级的通配符dv证书,也挺便宜不到八百元。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13421004.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-02
下一篇 2023-08-02

发表评论

登录后才能评论

评论列表(0条)

保存