- 前言
- 读者对象
- 如何阅读本书
- 勘误和支持
- 致谢
- 第 1 篇 高性能网站构建
- 第 1 章 深入理解 DNS 原理与部署 BIND
- 第 2 章 全面解析 CDN 技术与实战
- 第 3 章 负载均衡和高可用技术
- 第 4 章 配置及调优 LVS
- 第 5 章 使用 HAProxy 实现 4 层和 7 层代理
- 第 6 章 实践 Nginx 的反向代理和负载均衡
- 第 7 章 部署商业负载均衡设备 NetScaler
- 第 8 章 配置高性能网站
- 第 9 章 优化 MySQL 数据库
- 第 2 篇 服务器安全和监控
- 第 10 章 构建企业级虚拟专用网络
- 第 11 章 实施 Linux 系统安全策略与入侵检测
- 第 12 章 实践 Zabbix 自定义模板技术
- 第 13 章 服务器硬件监控
- 第 3 篇 网络分析技术
- 第 14 章 使用 tcpdump 与 Wireshark 解决疑难问题
- 第 15 章 分析与解决运营商劫持问题
- 第 16 章 深度实践 iptables
- 第 4 篇 运维自动化和游戏运维
- 第 17 章 使用 Kickstart 完成批量系统安装
- 第 18 章 利用 Perl 编程实施高效运维
- 第 19 章 精通 Ansible 实现运维自动化
- 第 20 章 掌握端游运维的技术要点
- 第 21 章 精通手游运维的架构体系
最佳实践 54:使用 OpenVPN 创建 Peer-to-Peer 的 VPN
在某些运维场景中,会遇到只需要把两台处于 Internet 上的服务器使用 VPN 互联起来的需求,比如远程的 SNMP 信息抓取、远程数据库备份等。
在这种情况下,使用 OpenVPN 来创建 Peer-to-Peer(点到点)的 VPN 的物理架构图如图 10-1 所示。
图 10-1 Peer-to-Peer 的 VPN 物理架构图
创建 Peer-to-Peer 的 VPN 的操作步骤如下。
步骤 1 在 2 台需要互联的服务器 x.y.z.28 和 a.b.c.239 上都需要执行的安装操作如下:
#下载 epel 的扩展仓库,其中提供了 openvpn 的 rpm 包。 wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm #安装 epel 的 rpm 包。 rpm -ivh epel-release-latest-6.noarch.rpm #安装 OpenVPN 前,需要安装 OpenVPN 的依赖库(lzo 库用于压缩;openssl 库用于支持加密和证书认证),如下: yum -y install lzo lzo-devel openssl openssl-devel #安装 OpenVPN。 yum -y install openvpn
步骤 2 在服务器 x.y.z.28 上生成静态密码。使用的命令如下:
openvpn --genkey --secret key
key 的内容如下:
# # 2048 bit OpenVPN static key # -----BEGIN OpenVPN Static key V1----- 8acc8d8feae2fc13ec66fac4eabc72b8 10fa75f239e8cd77d0cec0361dd77046 c6e757c9ed392410b6671899229983cc 6c85f9a3449ae6847fb569559bdebd93 bfecdf00bee63453e2cac80e4429e98d 3162eae826837836fe37959fd96040c4 445b568028e8cc251e557d3ce39b88e2 385af0b64bcb7860bc133859bcd9a8da 63f2729b1f5ebf003cb26005249dcf03 9fd37cba370af73be523ad549a3df6b5 b53f441e674f8e05201f051ce66f2f87 83c3c33fd29cf7bfb85be3370ee00c07 a8e7227e78557155fb365c812570d8bf c0bf845a7c24abc262de77a68567d1b2 afc96447fcfc1e3286f18a22512abfa3 f68bcd0bfe892fa14848166bc1b36bac -----END OpenVPN Static key V1-----
步骤 3 使用 scp 把该 key 文件传送到 a.b.c.239 服务器上。
步骤 4 创建隧道。
在服务器 x.y.z.28 上执行如下命令:
openvpn --remote a.b.c.239--dev tun0 --ifconfig 10.6.0.1 10.6.0.2 --secret key --daemon
在对端服务器 a.b.c.239 上执行如下命令:
openvpn --remote x.y.z.28 --dev tun0 --ifconfig 10.6.0.2 10.6.0.1 --secret key --daemon
其中的关键配置项解释如下。
- --remote 指定 peer-to-peer 架构中,对端的公网 IP。
- --dev 指定使用 tun 设备。
- --ifconfig 指定虚拟隧道的本端和远端 IP 地址。
- --secret 指定包含静态密码的文件。
- --daemon 指定使用后台驻守进程的模式。
执行步骤 4 后,两台服务器之间的虚拟专用网络如图 10-2 所示。
图 10-2 Peer-to-Peer 的 VPN 虚拟网络图
步骤 5 验证隧道功能。
在服务器 x.y.z.28 上执行如下命令:
ping 10.6.0.2 -c 2
在 a.b.c.239 使用 tcpdump 可以看到:
tcpdump -vvv -nnn -i tun0 icmp tcpdump: listening on tun0, link-type RAW (Raw IP), capture size 65535 bytes 10:07:04.031236 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84) 10.6.0.1 > 10.6.0.2: ICMP echo request, id 26451, seq 1, length 64 10:07:04.031272 IP (tos 0x0, ttl 64, id 42617, offset 0, flags [none], proto ICMP (1), length 84) 10.6.0.2 > 10.6.0.1: ICMP echo reply, id 26451, seq 1, length 64 10:07:05.032546 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84) 10.6.0.1 > 10.6.0.2: ICMP echo request, id 26451, seq 2, length 64 10:07:05.032565 IP (tos 0x0, ttl 64, id 42618, offset 0, flags [none], proto ICMP (1), length 84) 10.6.0.2 > 10.6.0.1: ICMP echo reply, id 26451, seq 2, length 64 10:07:06.033775 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
注意
1)在这种 Peer-to-Peer 模式中,使用静态密码的方式时,--secret 指定的 key 文件是需要进行严格保密的。
2)在这种 Peer-to-Peer 模式中,只能有 2 个端点进行参与。
3)Peer-to-Peer 是最简单的部署方式。初步学习 OpenVPN 时,建议先了解该模式 VPN 的构建方式。
Linux tun 设备精讲
tun 和 tap 是 Linux 等操作系统中提供的一种虚拟网络设备。tun 设备可以理解为 Point-to-Point 的设备;tap 设备可以理解为 Ethernet 设备。需要注意的是,tun/tap 设备不是从物理网卡设备中读取包,而是从用户空间的程序读取包;向该设备写入时,并不实际从物理网卡设备上发出包,而是由内核提交到应用程序。
讲起来比较难以理解,那么以本案例中的 ping 10.6.0.2 为例,对 OpenVPN 使用关键技术 tun 设备进行详细说明。
在服务器 x.y.z.28 上由用户使用 BASH 输入 ping 10.6.0.2 后,tun 设备和内核、OpenVPN 及物理网卡之间的工作流程如图 10-3 所示。
图 10-3 x.y.z.28 上的 tun 设备工作流程图
下面进行详细说明。
1)用户使用 BASH 进程输入 ping 10.6.0.2。此时,内核收到的 IP 包地址信息为:源地址 10.6.0.1,目的地址 10.6.0.2。
2)内核经过路由判断,把该 IP 包写入到 tun0 设备(tun0 的 IP 地址是 10.6.0.1)。
3)OpenVPN 进程读取该 IP 包。
4)OpenVPN 对该包进行封装、加密后,向内核写入,此时 IP 包地址信息为:源地址 x.y.z.28,目的地址 a.b.c.239。1)中的包信息,含 IP 头部,被封装到该 IP 包内。
5)内核经过路由判断,把该包写入到物理网卡(Physical Nic)。
6)物理网卡经过封装成帧(Frame)通过物理链路,经过互联网发送到 a.b.c.239 上。
服务器 a.b.c.239 收到经过互联网传输过来的数据时,它的工作流程如图 10-4 所示。
图 10-4 a.b.c.239 的 tun 设备工作流程图
下面进行详细说明。
1)物理网卡收到帧(Frame)。
2)物理网卡提交到内核。
3)OpenVPN 读取该 IP 包后,经过解封装、解密,获得内容是 ICMP 的 ping 包,目的地址是 tun0。
4)OpenVPN 向 tun0 写入经过第 3)步骤解封的 ICMP 包。
5)内核模块处理。
内核模块处理完成后,会发回 ICMP 请求响应。回包的流程和图 10-3 相同。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论