场景介绍:
机器介绍
- 本地一台Ubuntu服务器A , 处于内网中 , 无外网IP
- 外网一台Ubuntu服务器B , 外网地址139.199.4.205
- 目标 : 外网能够访问部署在A上的web项目
原理简述
分2步
- 将A与B组建成一个局域网
- 将B的80端口 转发到 A的80端口 即可大公告成
实现步骤
一 . 安装软件
登录A 和 B 服务器 分别输入如下命令
sudo apt-get -y install openvpn libssl-dev openssl
安装好后输入openvpn --version
如下所示表示安装成功
接着安装easy-rsa , easy-rsa用来制作openvpn相关证书
sudo apt-get -y install easy-rsa
二 . 制作CA证书
(以下操作 直到第七步 都是在B机器上操作)
在/etc/openvpn
目录下创建目录easy-rsa目录
sudo mkdir /etc/openvpn/easy-rsa/
把/usr/share/easy-rsa/
目录下的所有文件复制到/etc/openvpn/easy-rsa/
下
sudo cp -r /usr/share/easy-rsa/* /etc/openvpn/easy-rsa/
制作证书前需要切换到root用户下 sudo su
输入如下命令
source vars
./clean-all
./build-ca
这是在/etc/openvpn/easy-rsa/keys/
里有生成的证书文件 把ca.crt
复制到/etc/openvpn/
cp keys/ca.crt /etc/openvpn/
三 . 制作Server端证书
./build-key-server ShawnJi
我这里写的是ShawnJi , 大家可以随意填写 , 只是一个名字的作用 一路 回车键 和 y键 就可以了 这时/etc/openvpn/easy-rsa/keys/
目录下又生成了一些文件 , 其中ShawnJi.crt和ShawnJi.key两个文件是我们要用的 把他们复制到/etc/openvpn/
目录下
cp keys/ShawnJi.crt keys/ShawnJi.key /etc/openvpn/
四 . 生成Diffie-Hellman文件
./build-dh
稍等一会儿 , 运行结束后keys目录下新增的dh2048.pem就是我们要用的 , 复制到/etc/openvpn/
目录下cp keys/dh2048.pem /etc/openvpn/
五 . 制作Client端证书
输入
./build-key ShawnJiClient
同样一路 回车 keys目录下的ShawnJiClient.key 和 ShawnJiClient.crt 就是我们要的 , 后面放到A机器上去
六 . 配置Server端(B机器)
首先复制一套模板到目录下
cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
cd /etc/openvpn/
解压server.conf.gz
gzip -d server.conf.gz
修改解压出的server.conf文件
- 修改协议 proto udp -> proto tcp
- 修改证书 server.crt -> ShawnJi.crt server.key -> ShawnJi.key
- 修改Diffie-Hellman文件 dh1024.pem -> dh2048.pem
以上有可能会默认就是 如果这样不做更改便是
注意:上述server.conf文件中ShawnJi.crt、ShawnJi.key、dh2048.pem要与/etc/openvpn/目录下的相关文件一一对应。
同时,如果上述文件如果没有存放在/etc/openvpn/目录下,在server.conf文件中,我们要填写该文件的绝对路径 .
七 . 启动Server端openvpn
/etc/init.d/openvpn start
netstat -tunlp |grep 1194
如图便是成功
八 . 配置Client端(在A机器中操作 , 以上都是在B机器操作)
将第五步生成的ShawnJiClient.key ShawnJiClient.crt 和 第二部的 ca.key 转移到A机器中 复制 配置文件模板client.conf
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /home/ubuntu/
修改client.conf内容
- 修改proto udp -> proto tcp
- remote remote-server 1194 -> remote 139.199.4.205 1194
- cert client.crt -> cert ShawnJiClient.crt
- key client.key -> ShawnJiClient.key
- 文件重命名为client.ovpn
运行命令openvpn –config client.ovpn 如下图所示
九 . 配置端口转发(B机器上操作)
- 编辑
/etc/sysctl.conf
取消注释net.ipv4.ip_forward=1
- 输入以下命令
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 10.8.0.6:80
iptables -t nat -A POSTROUTING -d 10.8.0.6 -p tcp --dport 80 -j SNAT --to 10.8.0.1
这里是将B机器(10.8.0.1)的80端口映射到A机器(10.8.0.6)的80端口上 实现 访问B机器80端口等于访问A机器80端口
可选操作
至此全部完成 还剩下一些可选操作 , 如: 开机自启动 、 端口转发规则保存
开机自启动
在A机器上如下操作 这里我用的是修改/etc/rc.local
文件的方法 在/etc/rc.local
里添加如下命令
/usr/sbin/openvpn --config /home/shawnji/client.ovpn >/var/log/openvpn.log &
此外 , 需要将client.ovpn里的证书改写成绝对路径
端口转发规则保存并自动载入
规则保存和载入的命令:
iptables-save > /etc/iptables-config
`iptables-restore < /etc/iptables-config
- 保存当前规则
iptables-save > /etc/iptables-config
- 在
/etc/rc.local
中加入命令iptables-restore < /etc/iptables-config &
发表回复