公司内网Debian Server上的openvpn服务器搭建并通过SSH隧道转发到广域网
由于戴维营公司在长沙的学员,研发人员和北京的研发人员需要协同研发,故需要让北京的兄弟们加入到长沙办公室的内网,访问版本 管理服务器,于是采用在内网服务器上搭建一个OpenVPN服务,并把内网(铁道的宽带,木有分配动态的广域网ip给WAN,悲剧。)的OpenVPN服务端口通过ssh隧道转发到广域网上某个服务器上。
以下是记录过程:
OpenVPN服务软件包系统仓库里有现成的包,直接apt-get安装:
1
|
root@office.diveinedu.net:
|
复制openvpn的配置文件模板和生成证书的工具到 /etc/openvpn:
1
|
root@office.diveinedu.net:
|
3
|
root@office.diveinedu.net:
|
5
|
root@office.diveinedu.net:
|
7
|
root@office.diveinedu.net:
|
9
|
root@office.diveinedu.net:
|
下一步生成证书,先编辑vars文件设置证书配置信息,如果不需要指定证书的信息,可以跳过编辑vars文件的步骤:
1
|
root@office.diveinedu.net:
|
2
|
root@office.diveinedu.net:
|
3
|
root@office.diveinedu.net:
|
生成ca证书,这一步可以一路回车:
1
|
root@office.diveinedu.net:
|
下面是生成服务器和客户端的证书,每次命令到最后有2个关于是否签名证书和提交,都必须回答y,
才能生成有效证书,如果一路按回车,到最后可能发现一个空证书:
1
|
root@office.diveinedu.net:
|
2
|
root@office.diveinedu.net:
|
再生成一个DH PARAMETERS,OpenVPN的服务器端需要这个:
1
|
root@office.diveinedu.net:
|
就这样,OpenVPN服务端和客户端所需要的key就都生成好了.
把服务端需要的证书文件复制到目标目录:
1
|
root@office.diveinedu.net:
|
2
|
root@office.diveinedu.net:
|
把客户端需要的证书下载或传输到客户端的配置目录下。
(可以直接用工具把/etc/openvpn/easy-rsa/2.0/目录下的ca.crt client1.crt client1.key文件保存到本地,客户端连接的时候要用)
下一步就是配置OpenVPN的服务端 配置文件:
用vim命令修改服务器端的/etc/openvpn/server.conf
06
|
ca /etc/openvpn/ca .crt
|
07
|
cert /etc/openvpn/server .crt
|
08
|
key /etc/openvpn/server .key
|
09
|
dh /etc/openvpn/dh1024 .pem
|
10
|
server
10.8.0.0 255.255.255.0
|
11
|
ifconfig -pool-persist
ipp.txt
|
12
|
push "redirect-gateway
def1 bypass-dhcp"
|
13
|
push "dhcp-option
DNS 8.8.8.8"
|
14
|
push "dhcp-option
DNS 8.8.4.4"
|
20
|
status
openvpn-status.log
|
21
|
log-append
openvpn.log
|
然后需要在服务器端设置iptables,当前我内网的服务器ip是192.168.1.254
1
|
root@office.diveinedu.net:
|
1
|
root@office.diveinedu.net:
|
2
|
root@office.diveinedu.net:
|
然后启动OpenVPN服务:
1
|
root@office.diveinedu.net:
|
接下来就是客户端的配置文件设置了,大部分信息和Server端对应,编辑一个客户端配置文件:
vim client.ovpn
06
|
remote
desktop.diveinedu.net 1194
|
接下来就是用ssh客户端把本地监听的1194端口通过ssh隧道转发到广域网上的ip和端口,而且要求开机自动启动和断线后自动重连,
采用简单的Shell脚本来实现。
vim /root/sshtunnel4openvpn.sh
4
|
echo
"connecting to server."
|
5
|
sshpass
-p 'password' ssh -vv -oStrictHostKeyChecking=no -N -R 0.0.0.0:1194:192.168.1.254:1194 user@desktop.diveinedu.net;
|
7
|
echo
"connection closed.";
|
(以上脚本里的自动密码登录方法是有安全风险的,sshpass参数会记录密码。不建议采有密码认证,应该采用证书登录,我这是特殊情况,呵呵。)
脚本写好了。但是iptables规则没有保存和重启后自动启用规则。
先保存当前规则到文件:
1
|
root@office.diveinedu.net:
|
然后在/etc/rc.local最后一行exit 0之前加入脚本运行和和规则自动启动的命令:
3
|
nohup /root/sshtunnel4openvpn .sh
> /dev/null 2>&1
&
|
4
|
iptables-restore /etc/iptables .up.rules
|
这样,重启服务器后,他就会自动启动openvn服务并自动把内网端口通过隧道转发到广域网主机desktop.diveinedu.net的端口上,
这样,北京那边的研发人员就可以通过openvpn客户端登录到内网来了。
然后,下载客户端并安装配置
如果用的是windows的客户端,安装完毕后如果安装目录下没有config和log目录,要手动建立它们
将刚刚保存的ca.crt client1.crt client1.key client.ovpn这几个文件复制到config目录下,运行桌面上的OpenVPN GUI就可以连接了.
这样的方法非常适用于企业内部网络的WAN接入端都没分配公网IP,而是分配的私有地址,连花生壳这样的动态DNS都用不了的环境。
除了电信接入可以得到广域网ip地址,联通铁通都是分配的A类私有地址,IPV4地址耗尽,估计都被电信独占,啥时候可以普及IPV6阿。
长沙 戴维营教育 iOS培训 iOS开发,苹果开发,Linux开发,Unix/Linux C/C++培训
长沙 戴维营教育原创文章, 版权所有,如被转载,请务必注名出处。