bandwagonhost VPS debian7.0 安装配置OpenConnect VPN server AnyConnect ( ocserv )
查看linux版本:
1) 登录到服务器执行 lsb_release -a ,即可列出所有版本信息,
Distributor ID: Debian Description: Debian GNU/Linux 7.3 (wheezy) Release: 7.3 Codename: wheezy
更新系统后显示
Distributor ID: Debian Description: Debian GNU/Linux 7.6 (wheezy) Release: 7.6 Codename: wheezy
这次我准备用bandwagonhost.com的年付9.99美元的VPS来安装ocserv。
第一部分,注册bandwagonhost并设置好SSH登录。
512M内存 / 5G SSD硬盘/ G口 500G流量 / 年付9.99美元,我是使用tennfy.com置顶链接来注册的,因为我第一次是从他这里看到这个VPS的介绍,使用他的邀请链接,算是对他的一种支持吧。点击邀请链接进去后,Billing Cycle(付款方式)选择为$9.99 USD Annually(年付9.99美元),Configurable Options>>Location(机房位置选择),有两个选择:
US East Coast – Florida (USFL_2)美国东海岸 – 佛罗里达州(USFL_2)
US West Coast – Arizona (USAZ_2)美国西海岸 – 亚利桑那(USAZ_2)
大家都知道,美国西海岸的服务器对国内是最快的,因此我们选择US West Coast – Arizona (USAZ_2),
点击Checkout结账,进入注册界面,设置好注册信息,这个网站使用paypal来付款。
新手建议到tennfy.com看教程。
在下面的叙述中我把bandwagonhost称作搬瓦工,在搬瓦工首页点击VPS Hosting,点击Services–My Services选项卡,点击kiwiVM control panel,进入后台管理界面,首先在Main Controls 找到 Actions:,并点击stop,然后点击 Install new OS,重装系统,这里以debian-7.0-x86为例,选中,点击reload,开始重装,很快就会重装好。并会把ssh端口号和root密码显示出来,找到IP地址,root密码及ssh端口,使用Putty远程(SSH)管理Linux VPS,我们现在是使用root帐号及密码来ssh登录,现在我想改成使用密钥方式来ssh登录,并把密码登录方式禁用。
1、在Linux远程服务器生成密钥:
登录远程Linux VPS/服务器,执行:
root@vpser:~# ssh-keygen -t rsa //先运行这个命令 Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): //直接回车 Created directory '/root/.ssh'. Enter passphrase (empty for no passphrase): //输入密钥密码 Enter same passphrase again: //重复密钥密码 Your identification has been saved in /root/.ssh/id_rsa. //提示公钥和私钥已经存放在/root/.ssh/目录下 Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: 15:23:a1:41:90:10:05:29:4c:d6:c0:11:61:13:23:dd root@vpser.net The key's randomart image is: +--[ RSA 2048]----+ |=&@Bo+o o.o | |=o=.E o . o | | . . . | | . | | S | | | | | | | | | +-----------------+ root@vpser:~#
2、把id_rsa.pub改名并修改权限。
mv /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys chmod 600 /root/.ssh/authorized_keys
3、使用winscp以root帐号密码的方式登录vps
把/root/.ssh/id_rsa文件下载到本地并删除服务器上的id_rsa文件,
修改/etc/ssh/sshd_config 文件,将RSAAuthentication 和 PubkeyAuthentication 后面的值都改成yes ,
将PasswordAuthentication yes 修改成 PasswordAuthentication no,并把PasswordAuthentication no前面的注释符#去掉,保存。
4、重启sshd服务
Debian/Ubuntu执行/etc/init.d/ssh restart ;CentOS执行:/etc/init.d/sshd restart。
5、搬瓦工的root密码太简单了,我现在修改root密码
passwd root
输入两遍密码,然后提示密码修改成功。
6、使用putty登录
putty使用的私钥文件和Linux服务器或XShell的私钥格式不同,如果使用putty的话,需要将Linux主机上生成的id_rsa文件下载的本地。运行putty压缩包里面的puttygen.exe,选择Conversions->Import key选择私钥文件id_rsa,输入密钥文件的密码,会出现如下界面:
点击“Save Private Key”,将私钥保存为id_rsa.ppk
运行putty,在Host Name填写:root@主机名或ip
如果设置了密钥密码,出现:Passphrase for key “imported-openssh-key”时输入密钥密码。
如果设置没问题就会登录成功,出现用户提示符。
再提醒一下一定要保存好Putty私钥文件id_rsa.ppk或Linux服务器下载下来的id_rsa私钥文件。
第二部分,安装openconnect(ocserv)
追加软件源
echo "deb http://ftp.debian.org/debian wheezy-backports main contrib non-free" >> /etc/apt/sources.list
更新源:
apt-get update
顺便更新一下linux系统:
apt-get upgrade --show-upgraded
先安装依赖包
apt-get -t wheezy-backports install libgmp3-dev m4 gcc pkg-config make gnutls-bin -y
再安装依赖包
apt-get -t wheezy-backports install build-essential libwrap0-dev libpam0g-dev libdbus-1-dev \ libreadline-dev libnl-route-3-dev libprotobuf-c0-dev libpcl1-dev\ libopts25-dev autogen libgnutls28 libgnutls28-dev libseccomp-dev
下载安装Ocserv,目前最新版为0.8.1
cd /usr/src wget ftp://ftp.infradead.org/pub/ocserv/ocserv-0.8.1.tar.xz tar Jxvf ocserv-0.8.1.tar.xz cd ocserv-0.8.1 ./configure --prefix=/usr --sysconfdir=/etc && make && make install
返回到root文件夹下
cd
生成ssl证书
请注意,搬瓦工生成的证书截止日期是2005年,不能用,试了两次,无果,最后,在linode的服务器上,用同样的方法,生成了正确的证书,日期是2041年,不知道为什么。在另一个电脑上,使用linode证书后无数据接收,我猜是证书的问题,换一种方法制作证书后,日期竟然是10000年,证书问题导致不能建立ssl连接。
生成CA证书
certtool --generate-privkey --outfile ca-key.pem cat <<_EOF_> ca.tmpl
cn = "banwagon CA" organization = "banwagon Corp" serial = 1 expiration_days = 999 ca signing_key cert_signing_key crl_signing_key _EOF_
certtool --generate-self-signed --load-privkey ca-key.pem --template ca.tmpl --outfile ca-cert.pem
生成本地服务器证书
certtool --generate-privkey --outfile server-key.pem cat <<_EOF_> server.tmpl
cn = "www.banwagon.com" organization = "banwagon" serial = 2 expiration_days = 999 signing_key encryption_key tls_www_server _EOF_
certtool --generate-certificate --load-privkey server-key.pem --load-ca-certificate ca-cert.pem --load-ca-privkey ca-key.pem --template server.tmpl --outfile server-cert.pem
生成客户端证书
certtool --generate-privkey --outfile user-key.pem cat <<_EOF_>user.tmpl
cn = "banwagon" unit = "admins" serial = 1824 expiration_days = 999 signing_key tls_www_client _EOF_
certtool --generate-certificate --load-privkey user-key.pem --load-ca-certificate ca-cert.pem --load-ca-privkey ca-key.pem --template user.tmpl --outfile user-cert.pem
生成可在windows中可导入的p12格式的证书
openssl pkcs12 -export -inkey user-key.pem -in user-cert.pem -name "banwagonclient" \ -certfile ca-cert.pem -caname "banwagon CA" -out client.cert.p12
会提示设置证书密码,也可以不设置直接回车即可。
如果是在root#提示符下操作的,生成的文件在/root文件夹下,生成之后把服务器证书server-cert.pem 放到/etc/ssl/certs,私钥server-key.pem 放到/etc/ssl/private。
cp ca-cert.pem /etc/ssl/certs cp ca-key.pem /etc/ssl/private cp server-cert.pem /etc/ssl/certs cp server-key.pem /etc/ssl/private
接下来是配置文件
建立/etc/ocserv并把doc/sample.config拷到该文件夹下,改名为ocserv.conf:
mkdir /etc/ocserv && cp /usr/src/ocserv-0.8.1/doc/sample.config /etc/ocserv/ && mv /etc/ocserv/sample.config /etc/ocserv/ocserv.conf
编辑配置文件
vim /etc/ocserv/ocserv.conf
修改如下
auth = "plain[/etc/ocserv/ocpasswd]" #ocserv支持多种认证方式,这是自带的密码认证,使用ocpasswd创建密码文件 #ocserv还支持证书认证,可以通过Pluggable Authentication Modules (PAM)使用radius等认证方式 #同一个用户最多同时登陆数 max-same-clients = 10 #证书路径 server-cert = /etc/ssl/certs/server-cert.pem server-key = /etc/ssl/private/server-key.pem #运行组 run-as-group = nogroup #分配给VPN客户端的IP段 ipv4-network = 10.10.0.0 #DNS dns = 8.8.8.8 dns = 8.8.4.4 #注释掉route的字段,这样表示所有流量都通过 VPN 发送 #route = 192.168.1.0/255.255.255.0 #route = 192.168.5.0/255.255.255.0 user-profile改为user-profile = /etc/ocserv/profile.xml 并且去掉cisco-client-compat = true的注释。
然后是/etc/ocserv/profile.xml:
cp /usr/src/ocserv-0.8.1/doc/profile.xml /etc/ocserv/
修改HostAddress为你的服务器IP地址。
创建用户
ocpasswd -c /etc/ocserv/ocpasswd username #username为你要添加的用户名
修改系统配置,允许转发
vim /etc/sysctl.conf #修改这行 net.ipv4.ip_forward=1 #保存退出 sysctl -p
修改 iptables 规则
你可以参考 Linode 的文章 来配置 iptables
iptables -A INPUT -d 127.0.0.0/8 -j REJECT iptables -t nat -A POSTROUTING -j MASQUERADE iptables -A FORWARD -s 192.168.21.0/24 -j ACCEPT iptables -t nat -A POSTROUTING -s 192.168.21.0/24 -o eth0 -j MASQUERADE //将源地址是 192.168.21.0/24 的数据包进行地址伪装 iptables -A INPUT -i lo -j ACCEPT //允许来自于lo接口的数据包 iptables -A OUTPUT -o lo -j ACCEPT //允许向lo接口发送数据包 iptables -I INPUT -p tcp --dport 443 -j ACCEPT //打开tcp和udp的443端口。ocserv使用tcp的443端口认证,udp用于传输数据。 iptables -I INPUT -p udp --dport 443 -j ACCEPT iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu //自动调整MTU iptables -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
*filter # Allow all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0 -A INPUT -i lo -j ACCEPT -A INPUT -d 127.0.0.0/8 -j REJECT # Accept all established inbound connections -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Allow all outbound traffic - you can modify this to only allow certain traffic -A OUTPUT -j ACCEPT # Allow HTTP and HTTPS connections from anywhere (the normal ports for websites and SSL). -A INPUT -p tcp --dport 80 -j ACCEPT -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT # Allow SSH connections # # The -dport number should be the same port number you set in sshd_config # -A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT # Allow ping -A INPUT -p icmp -j ACCEPT # Log iptables denied calls -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7 -A INPUT -j DROP COMMIT
在你的 /etc/rc.local 的exit 前面加上这句 来开启 NAT
iptables -t nat -A POSTROUTING -j MASQUERADE iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
保存规则:
iptables-save >/etc/iptables-script
恢复规则:
iptables-restore </etc/iptables-script
配置启动文件
现在我们需要一个脚本来管理 Ocserv
Tony用skeleton改写了一个脚本,把这个脚本放到/etc/init.d/ocserv
chmod 755 /etc/init.d/ocserv update-rc.d ocserv defaults
就可以开机启动了。
你也可以通过
/etc/init.d/ocserv stop /etc/init.d/ocserv start /etc/init.d/ocserv restart
这样子来管理。
#!/bin/sh ### BEGIN INIT INFO # Provides: ocserv # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 ### END INIT INFO # Copyright Rene Mayrhofer, Gibraltar, 1999 # This script is distibuted under the GPL PATH=/bin:/usr/bin:/sbin:/usr/sbin DAEMON=/usr/sbin/ocserv PIDFILE=/var/run/ocserv.pid DAEMON_ARGS="-c /etc/ocserv/ocserv.conf" case "$1" in start) if [ ! -r $PIDFILE ]; then echo -n "Starting OpenConnect VPN Server Daemon: " start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \ $DAEMON_ARGS > /dev/null echo "ocserv." else echo -n "OpenConnect VPN Server is already running.\n\r" exit 0 fi ;; stop) echo -n "Stopping OpenConnect VPN Server Daemon: " start-stop-daemon --stop --quiet --pidfile $PIDFILE --exec $DAEMON echo "ocserv." rm -f $PIDFILE ;; force-reload|restart) echo "Restarting OpenConnect VPN Server: " $0 stop sleep 1 $0 start ;; status) if [ ! -r $PIDFILE ]; then # no pid file, process doesn't seem to be running correctly exit 3 fi PID=`cat $PIDFILE | sed 's/ //g'` EXE=/proc/$PID/exe if [ -x "$EXE" ] && [ "`ls -l \"$EXE\" | cut -d'>' -f2,2 | cut -d' ' -f2,2`" = \ "$DAEMON" ]; then # ok, process seems to be running exit 0 elif [ -r $PIDFILE ]; then # process not running, but pidfile exists exit 1 else # no lock file to check for, so simply return the stopped status exit 3 fi ;; *) echo "Usage: /etc/init.d/ocserv {start|stop|restart|force-reload|status}" exit 1 ;; esac exit 0
Debug
ocserv -c /etc/ocserv/ocserv.conf -f -d 1
第三部分,客户端使用
1、下载客户端
使用anyconnect-win-3.0.11042-pre-deploy-k9.iso安装客户端,下载地址:http://frodo.sca.com/downloads/,大家可以跟思科官网的MD5值对比一下,我检查过了,跟官网的MD5值是一样的。
如果你用最新版的3.1.05170,会有下面的提示,不能连接到服务器,新版不支持自签名的证书。
the service provider in your current location is restricting access to the internet. you need to log on with the service provider before you can establish a vpn session. you cantry this by visiting any website with your browser.
2、导入客户端证书
Windows 7+ 导入证书: 开始菜单搜索“cmd”,打开后输入 mmc(Microsoft 管理控制台)。 “文件”-“添加/删除管理单元”,添加“证书”单元 证书单元的弹出窗口中一定要选“计算机账户”,之后选“本地计算机”,确定。 在左边的“控制台根节点”下选择“证书”-“个人”,然后选右边的“更多操作”-“所有任务”-“导入”打开证书导入窗口。 选择刚才生成的 client.cert.p12 文件。下一步输入私钥密码。下一步“证书存储”选“个人”。 导入成功后,把导入的 CA 证书剪切到“受信任的根证书颁发机构”的证书文件夹里面。 打开剩下的那个私人证书,看一下有没有显示“您有一个与该证书对应的私钥”,以及“证书路径”下面是不是显示“该证书没有问题”。 然后关闭 mmc,提示“将控制台设置存入控制台1吗”,选“否”即可。 至此,证书导入完成。 注意 千万不要双击 .p12 证书导入!因为那样会导入到当前用户而不是本机计算机中。
GnuTLS error (at worker-vpn.c:732):其实就是证书有问题,重新制作证书吧,我重复做了不下五遍证书,以前在linode一样的方法一次成功,这个搬瓦工的vps硬是折腾了我好几次。
转载请注明:一秒钟的梦 » 安装配置OpenConnect VPN server AnyConnect (ocserv)