由于测试环境搭建不在同一个网络,平时查看hadoop集群状态、提交任务都可以通过hadoop-master的外网来操作。但是要读写kafka,需要直接连通所有的节点,全部映射端口太麻烦。一开始想到了VLAN(虚拟局域网),远远超出能力范围。最后通过搭架VPN来实现与测试环境的透明访问。
使用集成版本
参考 https://linux.cn/article-4733-1.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# download https://openvpn.net/index.php/access-server/download-openvpn-as-sw.html
# 安装
[root@cu2 ~]# rpm -ivh openvpn-as-2.0.25-CentOS6.x86_64.rpm
Preparing... ########################################### [100%]
1:openvpn-as ########################################### [100%]
The Access Server has been successfully installed in /usr/local/openvpn_as
Configuration log file has been written to /usr/local/openvpn_as/init.log
Please enter "passwd openvpn" to set the initial
administrative password, then login as "openvpn" to continue
configuration here: https://192.168.0.214:943/admin
To reconfigure manually, use the /usr/local/openvpn_as/bin/ovpn-init tool.
Access Server web UIs are available here:
Admin UI: https://192.168.0.214:943/admin
Client UI: https://192.168.0.214:943/
[root@cu2 ~]# passwd openvpn
然后通过web admin进行配置。如主机的信息、hostname以及监听绑定的IP
配置好以后,本地通过网页下载client程序安装。连接配置后:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
C:\Users\winse>tracert cu3
通过最多 30 个跃点跟踪
到 cu3 [192.168.0.148] 的路由:
1 2 ms 2 ms 2 ms 172.27.232.1
2 2 ms 2 ms 2 ms cu3 [192.168.0.148]
跟踪完成。
C:\Users\winse>route print
===========================================================================
IPv4 路由表
===========================================================================
活动路由:
网络目标 网络掩码 网关 接口 跃点数
0.0.0.0 0.0.0.0 192.168.1.1 192.168.1.102 20
0.0.0.0 128.0.0.0 172.27.232.1 172.27.232.2 20
...
http://designmylife.blog.163.com/blog/static/2067142542013527101659960/
路由匹配按最大(最亲)方式匹配。上面路由会先匹配mask为 128.0.0.0
的路由。最终把所有的流量经由VPN出去。
通过 Access Server 安装简单,配置通过网页来弄,和网上资料的都匹配不上,还有用户数量的限制,囧。
编译源码安装方式
参考:
Installation Notes
Installing OpenVPN
如何在Centos 7安裝openVPN
下载 tar.gz 后,查看里面的 INSTALL 文件内容,确认选择依赖软件的版本。
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
[root@cu2 openvpn-2.3.10]# yum install libpam* (centos7是pam*)
[root@cu2 openvpn-2.3.10]# yum install pam-devel.x86_64
[root@cu2 ~]# rz
rz waiting to receive.
Starting zmodem transfer. Press Ctrl+C to cancel.
Transferring lzo-2.06.tar.gz...
100% 569 KB 569 KB/sec 00:00:01 0 Errors
[root@cu2 ~]# tar zxvf lzo-2.06.tar.gz
[root@cu2 ~]# cd lzo-2.06
[root@cu2 lzo-2.06]# ./configure
[root@cu2 lzo-2.06]# make && make install
[root@cu2 openvpn-2.3.10]# ./configure --prefix=/usr/local/openvpn
[root@cu2 openvpn-2.3.10]# make && make install
[root@cu2 openvpn-2.3.10]# /usr/local/openvpn/sbin/openvpn --version
OpenVPN 2.3.10 x86_64-unknown-linux-gnu [SSL (OpenSSL)] [EPOLL] [MH] [IPv6] built on Mar 9 2016
https://github.com/OpenVPN/easy-rsa/releases
[root@cu2 EasyRSA-3.0.1]# ./easyrsa help
[root@cu2 EasyRSA-3.0.1]# ./easyrsa init-pki
[root@cu2 EasyRSA-3.0.1]# ./easyrsa build-ca
[root@cu2 EasyRSA-3.0.1]# ./easyrsa gen-req openvpn nopass
client
[root@cu2 EasyRSA-3.0.1]# ./easyrsa sign client openvpn
[root@cu2 EasyRSA-3.0.1]# ./easyrsa gen-req esw-cu nopass
server
[root@cu2 EasyRSA-3.0.1]# ./easyrsa sign server esw-cu
commonName随便取,但是不能重!
[root@cu2 EasyRSA-3.0.1]# tree pki/
pki/
├── ca.crt
├── certs_by_serial
│ ├── 01.pem
│ └── 02.pem
├── index.txt
├── index.txt.attr
├── index.txt.attr.old
├── index.txt.old
├── issued
│ ├── esw-cu.crt
│ └── openvpn.crt
├── private
│ ├── ca.key
│ ├── esw-cu.key
│ └── openvpn.key
├── reqs
│ ├── esw-cu.req
│ └── openvpn.req
├── serial
└── serial.old
[root@cu2 EasyRSA-3.0.1]# ./easyrsa gen-dh
[root@cu2 EasyRSA-3.0.1]# cd pki
[root@cu2 pki]# cp ca.crt dh.pem issued/esw-cu.crt private/esw-cu.key /etc/openvpn/
[root@cu2 openvpn-2.3.10]# cp sample/sample-config-files/server.conf /etc/openvpn/
proto tcp
cert esw-cu.crt
key esw-cu.key
dh dh.pem
# 在客户端额外添加这条路由到VPN
push "route 192.168.0.0 255.255.255.0"
# 和AS一样,会添加0.0.0.0到VPN的路由。所有请求默认走VPN https://www.digitalocean.com/community/tutorials/how-to-setup-and-configure-an-openvpn-server-on-centos-7
;push "redirect-gateway def1 bypass-dhcp"
# 内网特定的域名解析地址
;push "dhcp-option DNS 10.16.6.88"
#Enable multiple client to connect with same key
duplicate-cn
user nobody
group nobody
[root@cu2 pki]# cd /etc/openvpn/
[root@cu2 openvpn]# /usr/local/openvpn/sbin/openvpn --config /etc/openvpn/server.conf --启动完后Ctrl+C
[root@cu2 openvpn]# /usr/local/openvpn/sbin/openvpn --daemon --config server.conf
https://openvpn.net/index.php/open-source/downloads.html 下载安装 对应 的版本, 客户端的版本最好最好与服务端一致!! 不同版本默认配置不同。
拷贝sample-config/client.ovpn和服务端的ca.crt、openvpn.crt、openvpn.key到config目录下面。
修改client.ovpn:
1
2
3
4
proto tcp
remote webcu2 1194
cert openvpn.crt
key openvpn.key
然后启动 OpenVPN GUI ,右键connect就行了。
1
2
3
4
5
6
7
8
9
10
11
12
13
$ route print
...
IPv4 路由表
===========================================================================
活动路由:
网络目标 网络掩码 网关 接口 跃点数
0.0.0.0 0.0.0.0 192.168.1.1 192.168.1.102 20
10.8.0.1 255.255.255.255 10.8.0.5 10.8.0.6 20
10.8.0.4 255.255.255.252 在链路上 10.8.0.6 276
10.8.0.6 255.255.255.255 在链路上 10.8.0.6 276
10.8.0.7 255.255.255.255 在链路上 10.8.0.6 276
192.168.0.0 255.255.255.0 10.8.0.5 10.8.0.6 20
...
问题
连接到VPN服务端的机器是没有问题,但是不能访问该机器的应用(端口不同)
被防火墙限制了,在服务端把10.8.0.0/24加入到防火墙允许。
1
iptables -A INPUT -s 10.8.0.0/24 -j ACCEPT # 反正能访问OpenVPN的端口即可
在iptables上增加转发
1
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
centos7 firewall:(注:在centos7上面一样可以用上面的iptables命令!! https://www.centos.org/forums/viewtopic.php?t=53819 )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ firewall-cmd --permanent --add-masquerade
查看写入的内容: cat zones/public.xml
$ firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -o eth0 -j MASQUERADE
查看写入的内容: cat /etc/firewalld/direct.xml
$ firewall-cmd --reload
https://www.server-world.info/en/note?os=CentOS_7&p=firewalld&f=2
http://www.mjhall.org/centos7-firewalld-nat-router/
https://www.centos.org/forums/viewtopic.php?t=53819
#如果防火墙默认是reject,需要增加
# #开放主机IP firewall-cmd --permanent --zone=trusted --add-source=192.168.2.0/24
[root@bigdata-dev ~]# firewall-cmd --zone=public --add-port=1194/tcp --permanent
success
[root@bigdata-dev ~]# firewall-cmd --reload
success
查看iptables规则:
测试下:
1
2
3
4
5
$ ping cu3
正在 Ping cu3 [192.168.0.148] 具有 32 字节的数据:
来自 192.168.0.148 的回复: 字节=32 时间=5ms TTL=63
来自 192.168.0.148 的回复: 字节=32 时间=5ms TTL=63
其他(未实践 ,记录下来)
必须在服务器端的内网网关上将到10.8.0.0/24网段的路由指向到openvpn服务器,不然从服务器端内网其他机器根本找不到去往10.8.0.0/24网段的路由。这里又分两种情况,一种是服务端有内网网关设备的(按如上说法即可);一种是服务端内网没有网关设备,即服务器通过交换机相连,相互通讯靠广播的情况。我的就是这种情况。需要在想访问的server上增加到10.8.0.0/24的路由,如下
route add -net 10.8.0.0/24 gw 192.168.1.211 #1.211为openvpn服务器的内网IP
Make sure that you’ve enabled IP and TUN/TAP forwarding on the OpenVPN server machine.
确定开启了转发功能,然后在openvpn服务器Iptables添加如下两条规则
iptables -A FORWARD -i tun0 -s 10.8.0.0/24 -j ACCEPT #简单说,允许数据从客户端到后端server
iptables -A FORWARD -i em2 -d 10.8.0.0/24 -j ACCEPT #允许数据从后端server到客户端
参考
–END