Ubuntu使用OpenVPN搭建专用网络

发布于:2018年03月19日    浏览:6081 次    属于:服务器运维 > 环境配置 原创作者:张晓栋

 

前面已经介绍过如果在Windows下使用OpenVPN搭建服务端以及客户端的连接方式,不过探索的脚步不能停下, 本文记录在Ubuntu下如何搭建OpenVPN服务端,本次采用的为Ubuntu 16.04.1 LTS 32位


进入root模式:

sudo sh


首先刷新安装源:

apt-get update


安装OpenVPN

apt-get install openvpn easy-rsa

出现询问时输入Y


复制openvpn-ca到home目录

make-cadir ~/openvpn-ca


修改 openvpn-ca 目录权限为777

chmod 777 "openvpn-ca"


切换ubuntu shell 运行模式

dpkg-reconfigure dash

在弹出的界面选择 NO

输入:

ls -l /bin/sh

查看当前的运行模式为bash就正确了,

Exit退出 root模式,输入sudo sh 重新进去,以Bash模式运行


cd ~/openvpn-ca


vim vars

找到以下内容:

export KEY_COUNTRY="US"

export KEY_PROVINCE="CA"

export KEY_CITY="SanFrancisco"

export KEY_ORG="Fort-Funston"

export KEY_EMAIL="me@myhost.mydomain"

export KEY_OU="MyOrganizationalUnit"


做如下修改:

export KEY_COUNTRY="CN"

export KEY_PROVINCE="SH"

export KEY_CITY="ShangHai"

export KEY_ORG="BlackBaby"

export KEY_EMAIL="xiaoming.qq.com"

export KEY_OU="BlackBaby.Net"


export KEY_NAME="EasyRSA"

修改为:

export KEY_NAME="EasyRSA-BlackBaby"

保存退出


source ./vars

得到如下输出:

NOTE: If you run ./clean-all, I will be doing a rm -rf on /home/ubuntu/openvpn-ca/keys


这时候环境就初始化了接下来的操作和在Windows中的操作类似只是在命令前面加入了 ./

./clean-all


生成根证书,全程回车即可

./build-ca


生成服务端秘钥,这个过程比较慢,需要等待一会

./build-dh


生成服务端证书,过程中在默认都回车,在询问y和n时输入y

./build-key-server server


生成客户端密钥

./build-key zhangxiaodong


复制刚刚生成的服务端秘钥到 /etc/openvpn

cd ~/openvpn-ca/keys

cp ca.crt ca.key server.crt server.key dh2048.pem /etc/openvpn


创建服务端配置文件并输入参考内容:

vim /etc/openvpn/server.conf


port 1194             #指定监听的本机端口号
proto tcp             #指定采用的传输协议,可以选择tcp或udp
dev tun               #指定创建的通信隧道类型,可选tun或tap
ca ca.crt             #指定CA证书的文件路径
cert server.crt       #指定服务器端的证书文件路径
key server.key    #指定服务器端的私钥文件路径
dh dh2048.pem         #指定迪菲赫尔曼参数的文件路径
server 192.0.2.0 255.255.255.0   #指定虚拟局域网占用的IP地址段和子网掩码,此处配置的服务器自身占用10.0.0.1。
ifconfig-pool-persist ipp.txt   #服务器自动给客户端分配IP后,客户端下次连接时,仍然采用上次的IP地址(第一次分配的IP保存在ipp.txt中,下一次分配其中保存的IP)。
push "route 0.0.0.0 0.0.0.0"      #表示client通过VPN SERVER上网
push "redirect-gateway def1 bypass-dhcp"    #使客户端所有网络通信通过vpn
push "dhcp-option DNS 119.29.29.29"      #DNS配置,根据实际情况配置
push "dhcp-option DNS 180.76.76.76"      #DNS配置,根据实际情况配置

keepalive 10 120      #每10秒ping一次,连接超时时间设为120秒。
comp-lzo              #开启VPN连接压缩,如果服务器端开启,客户端也必须开启
client-to-client      #允许客户端与客户端相连接,默认情况下客户端只能与服务器相连接
persist-key
persist-tun           #持久化选项可以尽量避免访问在重启时由于用户权限降低而无法访问的某些资源。
status openvpn-status.log    #指定记录OpenVPN状态的日志文件路径

verb 3                #指定日志文件的记录详细级别,可选0-9,等级越高日志内容越详细



输入:dpkg-reconfigure dash,选择Yse切换回原来的shell模式

输入:exit 退出,sudo sh,重新进入默认root模式


现在OpenVPN的服务端配置已经结束了,接下来配置IP NAT 转发,为连入VPN的客户端提供上网服务


安装iptables建立一个NAT

sudo apt-get install iptables


开启内核转发功能

vim /etc/sysctl.conf

删除 #net.ipv4.ip_forward=1 前的#号,开启ipv4 forward

sudo sysctl -p 若运行后显示 net.ipv4.ip_forward = 1,表示修改生效了。


设置从外网端口,转发从VPN客户端来的数据包
iptables -t nat -A POSTROUTING -s 192.0.2.0/24 -o eth0 -j MASQUERADE

注:eth0代表可以访问外网的网卡,可以通过命令 ifconfig 查看,你自己的网卡名称


保存数据转发规则

sudo iptables-save > /etc/iptables-rules


vim /etc/network/interfaces
找到 eth0 那一节,在对 eth0 的设置最末尾加上下面这句:

pre-up iptables-restore < /etc/iptables-rules


到这里配置就全部结束了,输入Reboot重启机器即可生效,生成的客户端文件在刚刚的 openvpn-ca/keys/文件夹中,关于客户端的配置请参见windows使用openvpn搭建虚拟专用网络中客户端的配置。