google-cloud搭建vpn

引言

由于公司需要,而老板又不舍得花钱,于是使用google cloud免费vps,搭建vpn。
google cloud
需要翻墙访问,有gmail账户,单币种美金信用卡(好像有些双币种信用卡也可以,具体没试过)
免费试用1年,赠送300vps5,所以申请vps时,用最低配置,每个月接近5,300$可以支撑一年,但是流量是收费的,所以流量很大情况下,可能用不到一年。
下面就是具体配置了,分两版:centos和ubuntu

Google Cloud配置

建立好Compute Engine后,申请一个永久静态地址,然后配置SSH登录证书等内容。
详情查看Google文档
如果实在不想看文档,可以看这里

主要配置是在Google的Firewall rules里,这里决定了什么包可以访问到内部的instance,其后才是instance内部的iptables的配置。

这里我们建立一条新的rule,source filter填写0.0.0.0/0,代表任何地方发出的包,除非你只想在特定IP上访问,否则就填写这个。
然后在Allowed protocols and ports里添加udp:500;udp:4500;esp

  • 这里udp:500IPSEC协议指定的端口,会通过这个端口来发送Control plane的包
  • udp:4500是当source或者destination在NAT后时转而使用的端口,另外当NAT被检测到后,Data plane的数据包也会被使用端口,这个时候ESP的数据包会被包含在UDP包中,端口也是这个
  • 最后esp就是允许Data plane的数据包通过

另外需要勾选允许ip forwarding

安装StrongSwan

从源文件编译安装

安装PAM库和SSL库,以及make和gcc

1
2
3
4
5
6
7
#ubuntu
apt-get update
apt-get install libpam0g-dev libssl-dev make gcc
#centos
yum -y update
yum -y install pam-devel openssl-devel make gcc

下载StrongSwan的源码并编译

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#下载
wget http://download.strongswan.org/strongswan.tar.gz
tar xzf strongswan.tar.gz
cd strongswan-*
#生成 Makefile为编译做准备
#OpenVZ使用以下参数
./configure –enable-eap-identity –enable-eap-md5 \
–enable-eap-mschapv2 –enable-eap-tls –enable-eap-ttls –enable-eap-peap \
–enable-eap-tnc –enable-eap-dynamic –enable-eap-radius –enable-xauth-eap \
–enable-xauth-pam –enable-dhcp –enable-openssl –enable-addrblock –enable-unity \
–enable-certexpire –enable-radattr –enable-tools –enable-openssl –disable-gmp –enable-kernel-libipsec
#其它服务器执行
./configure –prefix=/usr –sysconfdir=/etc/strongswan –enable-eap-identity \
–enable-eap-md5 –enable-eap-mschapv2 –enable-eap-tls –enable-eap-ttls \
— enable-eap-peap –enable-eap-tnc –enable-eap-dynamic \
–enable-eap-radius –enable-xauth-eap –enable-xauth-pam –enable-dhcp \
–enable-addrblock –enable-unity –enable-certexpire –enable-radattr \
–enable-openssl –disable-gmp
#编译并且安装
make&&make install
#生成ipsec和strongswan命令
mv /usr/sbin/{ipsec,strongswan}

判断VPS是Openvz还是KVM还是Xen

1.通过系统上的相关目录或文件判断
执行:ls /proc/ ,一般Xen的VPS,/proc目录下面会有xen的目录,openvz的会有vz目录。
2.执行:free -m 看内存,openvz的没有swap,当然也有xen的没有swap,但是xen的是可以加的,openvz不行。
3.执行:uname -a 有些xen的VPS里面会显示有xen。
4.执行:ifconfig 查看网卡,openvz的一般都是venet0: ,xen的一般都是eth
5.通过VPS控制面板查看,像SolusVM、vePortal控制面板上都显示虚拟技术。

完成后执行ipsec version查看是否安装成功。

生成证书

生成CA私钥

1
ipsec pki –gen –outform pem > ca.pem

利用私钥签名CA证书

1
ipsec pki –self –in ca.pem –dn “C=com, O=myvpn, CN=VPN CA” –ca –outform pem >ca.cert.pem

生成server端私钥

1
ipsec pki –gen –outform pem > server.pem

用CA证书签发server端证书

这里需要将下面的地址更换为google cloud中申请到的静态公网ip地址。

1
2
3
4
5
SERVER_ADDR=”[REPLACE_WITH_YOUR_OWN_IP_ADDRESS]”
ipsec pki –pub –in server.pem | ipsec pki –issue –cacert ca.cert.pem \
–cakey ca.pem –dn “C=com, O=myvpn, CN=$SERVER_ADDR” \
–san=”$SERVER_ADDR” –flag serverAuth –flag ikeIntermediate \
–outform pem > server.cert.pem

生成client端私钥

1
ipsec pki –gen –outform pem > client.pem

利用CA证书签发client端证书

1
ipsec pki –pub –in client.pem | ipsec pki –issue –cacert ca.cert.pem –cakey ca.pem –dn “C=com, O=myvpn, CN=VPN Client” –outform pem > client.cert.pem

生成client端p12证书

1
openssl pkcs12 -export -inkey client.pem -in client.cert.pem -name “client” -certfile ca.cert.pem -caname “VPN CA” -out client.cert.p12

安装证书

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# if not root probably you need to prepend sudo in front of the following commands
#for ubuntu
cp -r ca.cert.pem /usr/local/etc/ipsec.d/cacerts/
cp -r server.cert.pem /usr/local/etc/ipsec.d/certs/
cp -r server.pem /usr/local/etc/ipsec.d/private/
cp -r client.cert.pem /usr/local/etc/ipsec.d/certs/
cp -r client.pem /usr/local/etc/ipsec.d/private/
#for centos
cp -r ca.cert.pem /etc/strongswan/ipsec.d/cacerts/
cp -r server.cert.pem /etc/strongswan/ipsec.d/certs/
cp -r server.pem /etc/strongswan/ipsec.d/private/
cp -r client.cert.pem /etc/strongswan/ipsec.d/certs/
cp -r client.pem /etc/strongswan/ipsec.d/private/

配置StrongSwan

配置ipsec.conf

ubuntu:/usr/local/etc/ipsec.conf
centos:/etc/strongswan/ipsec.conf
替换或新添加为如下内容(rightsourceip为申请的静态公网ip地址):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
config setup
uniqueids=never
conn iOS_cert
keyexchange=ikev1
# strongswan version >= 5.0.2, compatible with iOS 6.0,6.0.1
fragmentation=yes
left=%defaultroute
leftauth=pubkey
leftsubnet=0.0.0.0/0
leftcert=server.cert.pem
right=%any
rightauth=pubkey
rightauth2=xauth
rightsourceip=10.31.2.0/24
rightcert=client.cert.pem
auto=add
conn android_xauth_psk
keyexchange=ikev1
left=%defaultroute
leftauth=psk
leftsubnet=0.0.0.0/0
right=%any
rightauth=psk
rightauth2=xauth
rightsourceip=10.31.2.0/24
auto=add
conn networkmanager-strongswan
keyexchange=ikev2
left=%defaultroute
leftauth=pubkey
leftsubnet=0.0.0.0/0
leftcert=server.cert.pem
right=%any
rightauth=pubkey
rightsourceip=10.31.2.0/24
rightcert=client.cert.pem
auto=add
conn windows7
keyexchange=ikev2
ike=aes256-sha1-modp1024!
rekey=no
left=%defaultroute
leftauth=pubkey
leftsubnet=0.0.0.0/0
leftcert=server.cert.pem
right=%any
rightauth=eap-mschapv2
rightsourceip=10.31.2.0/24
rightsendcert=never
eap_identity=%any
auto=add

配置strongswan.conf

ubuntu:/usr/local/etc/ipsec.conf
centos:/etc/strongswan/ipsec.conf
替换或新添加为如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
charon {
load_modular = yes
duplicheck.enable = no
compress = yes
plugins {
include strongswan.d/charon/*.conf
}
dns1 = 8.8.8.8
dns2 = 8.8.4.4
nbns1 = 8.8.8.8
nbns2 = 8.8.4.4
}
include strongswan.d/*.conf

配置ipsec.secrets

ubuntu:/usr/local/etc/ipsec.conf
centos:/etc/strongswan/ipsec.conf
替换或新添加为如下内容:

1
2
3
4
: RSA server.pem
: PSK “mykey”
: XAUTH “mykey”
[用户名] %any : EAP “[密码]”

注意将PSK、XAUTH处的”mykey”编辑为唯一且私密的字符串,并且将[用户名]改为自己想要的登录名,[密码]改为自己想要的密码([]符号去掉),可以添加多行,得到多个用户。

配置iptables

修改系统转发sysctrl.conf

打开/etc/sysctl.conf,然后uncomment包含net.ipv4.ip_forward=1的这一行。

保存后,执行sysctl -p

修改iptables

INF替换为自己的网络接口.

1
2
3
4
5
6
7
8
9
10
11
12
13
INF=”Your own network interface”
iptables -A FORWARD -m state –state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.31.2.0/24 -j ACCEPT
iptables -A INPUT -i $INF -p esp -j ACCEPT
iptables -A INPUT -i $INF -p udp –dport 500 -j ACCEPT
iptables -A INPUT -i $INF -p tcp –dport 500 -j ACCEPT
iptables -A INPUT -i $INF -p udp –dport 4500 -j ACCEPT
# for l2tp
iptables -A INPUT -i $INF -p udp –dport 1701 -j ACCEPT
# for pptp
iptables -A INPUT -i $INF -p tcp –dport 1723 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.31.2.0/24 -o $INF -j MASQUERADE

【注意】:
1.此处$INF为服务器网卡设备,对于OpenVZ主机请添venet0,其他主机添eth0,具体通过ifconfig查看使用的那个网卡
2.此处ip:10.31.2.0/24仅举例,必须与上文ipsec.conf中的设置保持一致,但可是设置多对。

保存iptables且开机自动启动

1
2
3
4
5
6
7
8
9
10
#for ubuntu
iptables-save > /etc/iptables.rules
cat > /etc/network/if-up.d/iptables<<EOF
#!/bin/sh
iptables-restore < /etc/iptables.rules
EOF
chmod +x /etc/network/if-up.d/iptables
#for centos
service iptables save

重启ipsec/iptables/strongswan服务

1
2
3
service iptables restart
service strongswan restart
ipsec restart

至此分讲完成。

WP8.1手机安装ca.cert.pem,进入设置VPN添加IKEv2连接,地址为证书中的地址或IP,通过用户名-密码连接。
Windows连接也是一样,但注意将证书导入本地计算机而不是当前用户的“受信任的证书颁发机构”。
iOS/Android/Mac OS X设备添加Cisco IPSec PSK验证方式,预共享密钥是/usr/local/etc/ipsec.secrets或者/etc/strongswan/ipsec.secrets中PSK后的字符串(不含引号),用户名密码同上,可以通过任意域名或IP连接,不需要证书.

自动化安装脚本

下面附上自动化安装脚本,点我获取,如若有问题请创建issue沟通。

×

如果文章对您有用请随意打赏!

扫码支持
谢谢支持!

打开支付宝扫一扫,即可进行扫码打赏哦

—— 本文结束 ——
版权声明 
Jet’s Blog by Jet Han is licensed under a Creative Commons BY-NC-ND 4.0 International License.
 jet han 创作并维护的 jet 的博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证
本文首发于Jet 的博客( http://jet-han.oschina.io/ ),版权所有,侵权必究。

文章目录

  1. 1. 引言
  2. 2. Google Cloud配置
  3. 3. 安装StrongSwan
    1. 3.1. 从源文件编译安装
    2. 3.2. 下载StrongSwan的源码并编译
      1. 3.2.1. 判断VPS是Openvz还是KVM还是Xen
  4. 4. 生成证书
    1. 4.1. 生成CA私钥
    2. 4.2. 利用私钥签名CA证书
    3. 4.3. 生成server端私钥
    4. 4.4. 用CA证书签发server端证书
    5. 4.5. 生成client端私钥
    6. 4.6. 利用CA证书签发client端证书
    7. 4.7. 生成client端p12证书
    8. 4.8. 安装证书
  5. 5. 配置StrongSwan
    1. 5.1. 配置ipsec.conf
    2. 5.2. 配置strongswan.conf
    3. 5.3. 配置ipsec.secrets
  6. 6. 配置iptables
    1. 6.1. 修改系统转发sysctrl.conf
    2. 6.2. 修改iptables
    3. 6.3. 保存iptables且开机自动启动
    4. 6.4. 重启ipsec/iptables/strongswan服务
    5. 6.5. 自动化安装脚本

未经允许不得转载:国外主机测评 » google-cloud搭建vpn

赞 (0) 打赏

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏