公司内网Debian Server上的openvpn服务器搭建并通过SSH隧道转发到广域网
来源:互联网 发布:淘宝网红大金 编辑:程序博客网 时间:2024/05/16 17:33
由于戴维营公司在长沙的学员,研发人员和北京的研发人员需要协同研发,故需要让北京的兄弟们加入到长沙办公室的内网,访问版本 管理服务器,于是采用在内网服务器上搭建一个OpenVPN服务,并把内网(铁道的宽带,木有分配动态的广域网ip给WAN,悲剧。)的OpenVPN服务端口通过ssh隧道转发到广域网上某个服务器上。
以下是记录过程:
OpenVPN服务软件包系统仓库里有现成的包,直接apt-get安装:
1
root@office.diveinedu.net:
#apt-get -y install openvpn
复制openvpn的配置文件模板和生成证书的工具到 /etc/openvpn:
1
root@office.diveinedu.net:
# cp -R /usr/share/doc/openvpn/examples/easy-rsa/ /etc/openvpn
2
3
root@office.diveinedu.net:
# cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
4
5
root@office.diveinedu.net:
# cd /etc/openvpn
6
7
root@office.diveinedu.net:
# gzip -d server.conf.gz
8
9
root@office.diveinedu.net:
# cd easy-rsa/2.0/
下一步生成证书,先编辑vars文件设置证书配置信息,如果不需要指定证书的信息,可以跳过编辑vars文件的步骤:
1
root@office.diveinedu.net:
# vim vars
2
root@office.diveinedu.net:
# source ./vars
3
root@office.diveinedu.net:
# ./clean-all
生成ca证书,这一步可以一路回车:
1
root@office.diveinedu.net:
#./build-ca
下面是生成服务器和客户端的证书,每次命令到最后有2个关于是否签名证书和提交,都必须回答y,
才能生成有效证书,如果一路按回车,到最后可能发现一个空证书:
1
root@office.diveinedu.net:
# ./build-key-server server
2
root@office.diveinedu.net:
# ./build-key client1
再生成一个DH PARAMETERS,OpenVPN的服务器端需要这个:
1
root@office.diveinedu.net:
# ./build-dh
就这样,OpenVPN服务端和客户端所需要的key就都生成好了.
把服务端需要的证书文件复制到目标目录:
1
root@office.diveinedu.net:
# cd keys
2
root@office.diveinedu.net:
# cp ca.crt dh1024.pem server.crt server.key /etc/openvpn/
把客户端需要的证书下载或传输到客户端的配置目录下。
(可以直接用工具把/etc/openvpn/easy-rsa/2.0/目录下的ca.crt client1.crt client1.key文件保存到本地,客户端连接的时候要用)
下一步就是配置OpenVPN的服务端 配置文件:
用vim命令修改服务器端的/etc/openvpn/server.conf
01
port 1194
#连接端口
02
proto tcp
03
;proto udp
#连接方式
04
;dev tap
05
dev tun
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
#ip分配,不能跟本地冲突
11
ifconfig
-pool-persist ipp.txt
12
push
"redirect-gateway def1 bypass-dhcp"
#让客户端设置默认路由经过vpn链路
13
push
"dhcp-option DNS 8.8.8.8"
#dns
14
push
"dhcp-option DNS 8.8.4.4"
15
duplicate-cn
#如果你要多人共用一个证书的话,请开启本项。
16
keepalive 10 120
#连接测试,意思是10秒ping一次,120秒没有返回就断开重连
17
comp-lzo
#开启压缩传输
18
persist-key
19
persist-tun
20
status openvpn-status.log
21
log-append openvpn.log
22
verb 3
然后需要在服务器端设置iptables,当前我内网的服务器ip是192.168.1.254
1
root@office.diveinedu.net:
# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j SNAT --to-source 192.168.1.254
1
root@office.diveinedu.net:
# iptables -A INPUT -p tcp --dport 1194 -j ACCEPT
2
root@office.diveinedu.net:
# iptables -A OUTPUT -p tcp --sport 1194 -j ACCEPT
然后启动OpenVPN服务:
1
root@office.diveinedu.net:
# /etc/init.d/openvpn start
接下来就是客户端的配置文件设置了,大部分信息和Server端对应,编辑一个客户端配置文件:
vim client.ovpn
01
client
02
;dev tap
03
dev tun
04
proto tcp
05
;proto udp
06
remote desktop.diveinedu.net 1194
#连接ip/域名 端口 (这里不是192.168.1.254是因为我后面会把内网端口监听转发到这域名的ip上)
07
resolv-retry infinite
08
nobind
09
persist-key
10
persist-tun
11
ca ca.crt
12
cert client1.crt
13
key client1.key
14
ns-cert-
type
server
15
comp-lzo
16
verb 3
接下来就是用ssh客户端把本地监听的1194端口通过ssh隧道转发到广域网上的ip和端口,而且要求开机自动启动和断线后自动重连,
采用简单的Shell脚本来实现。
vim /root/sshtunnel4openvpn.sh
1
#!/bin/bash
2
while true;
3
do
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;
6
7
echo "connection closed.";
8
done
(以上脚本里的自动密码登录方法是有安全风险的,sshpass参数会记录密码。不建议采有密码认证,应该采用证书登录,我这是特殊情况,呵呵。)
脚本写好了。但是iptables规则没有保存和重启后自动启用规则。
先保存当前规则到文件:
1
root@office.diveinedu.net:
# iptables-save > /etc/iptables.up.rules
然后在/etc/rc.local最后一行exit 0之前加入脚本运行和和规则自动启动的命令:
1
# By default this script does nothing.
2
3
nohup
/root/sshtunnel4openvpn
.sh >
/dev/null
2>&1 &
4
iptables-restore
/etc/iptables
.up.rules
5
6
exit
0
这样,重启服务器后,他就会自动启动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++培训
长沙 戴维营教育原创文章, 版权所有,如被转载,请务必注名出处。
- 公司内网Debian Server上的openvpn服务器搭建并通过SSH隧道转发到广域网
- 通过 SSH 端口转发实现异地内网服务器互通
- SSH隧道与端口转发及内网穿透
- SSH隧道与端口转发及内网穿透
- SSH隧道与端口转发及内网穿透
- SSH隧道与端口转发内网穿透
- SSH隧道与端口转发及内网穿透
- SSH隧道与端口转发内网穿透
- SSH隧道与端口转发内网穿透
- 【转载】SSH隧道与端口转发及内网穿透
- SSH隧道端口转发及内网穿透
- SSH隧道与端口转发及内网穿透
- [zz]sancho中通过ssh隧道实现连接内网中的mldonkey服务器
- 通过XShell 的SSH隧道功能, 让外网访问内网网站
- ssh反向隧道实验——没有端口映射的前提下,让外网访问内网服务器
- 使用SSH反向隧道进行内网穿透(远程端口转发)
- 使用反向代理(Nginx)和隧道转发(SSH)实现内网端口映射
- pgcli通过SSH本地转发连接远程服务器上的PostgreSQL DB
- Linux中如何新建用户
- 指针函数与函数指针的区别
- (1.2.4)数组和广义表
- Android利用canvas画各种图形(点、直线、弧、圆、椭圆、文字、矩形、多边形、曲线、圆角矩形)
- TDDL配置数据源
- 公司内网Debian Server上的openvpn服务器搭建并通过SSH隧道转发到广域网
- Matlab Intro - FFT
- HDU - 1318 Palindromes(字符串)
- C4.5算法
- 专款专用平台
- 【转】ACM博弈知识汇总
- 如何将sqlserver表中的数据导出sql语句或生成insert into语句
- poj 1651 dp 记忆化搜索
- C中如何调用C++函数?