Write by lyc at 2022-5-9

1.OpenVPN 站点到站点模式 架构图例

openvpn 的站点对站点模式的本质,也是客户端服务器模式。

2.Linux 服务器环境准备

两台 OpenVPN Linux 服务器初始化配置。

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
# 禁用 firewalld 防火墙
systemctl disable firewalld
systemctl stop firewalld

# 启用 iptables 防火墙
yum -y install iptables iptables-services
## 清空默认的防火墙规则
iptables -F && iptables -X && iptables -Z
iptables -t nat -F && iptables -t nat -X && iptables -t nat -Z
iptables-save > /etc/sysconfig/iptables
## 启动iptables
systemctl enable iptables
systemctl start iptables

# 禁用 SElinux
sed -i "/^SELINUX/s/enforcing/disabled/" /etc/selinux/config
setenforce 0

# 开启内核路由转发
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p

# 操作系统及软件版本更新到最新
yum install -y epel-release
yum update -y

两台 OpenVPN Linux 服务器 iptables 配置伪装,目的是为了能够通过隧道访问对端局域网内部的其他网络设备。

1
2
3
4
5
6
# 在nat表上添加转发策略,MASQUERADE表示伪装
iptables -t nat -A POSTROUTING -s 10.200.0.0/23 -j MASQUERADE # access-server
iptables -t nat -A POSTROUTING -s 10.201.0.0/23 -j MASQUERADE # site

# 保存iptables配置
iptables-save > /etc/sysconfig/iptables

3.OpenVPN 点对点模式配置

证书配置略,请参考证书管理 《OpenVPN easy-rsa管理证书》

OpenVPN 服务器端配置

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
$ vim /etc/openvpn/server/ucloud-to-company-server.conf 
proto tcp-server
dev tun
local 0.0.0.0
port 1201
ifconfig 10.200.0.1 10.200.0.2

tls-server
tls-auth /etc/openvpn/server/certs/ta.key 0
dh /etc/openvpn/server/certs/dh.pem
ca /etc/openvpn/server/certs/ca.crt
cert /etc/openvpn/server/certs/server.crt
key /etc/openvpn/server/certs/server.key

persist-key
persist-tun
cipher AES256
auth SHA512
user openvpn
group openvpn
keepalive 10 60
ping-timer-rem
verb 3
daemon
log-append /etc/openvpn/logs/ucloud-to-company-server.log

route 10.201.0.0 255.255.254.0 # access-server 隧道路由
route 192.168.100.0 255.255.255.0
route 192.168.28.0 255.255.254.0

OpenVPN 客户端配置

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
$ vim /etc/openvpn/client/company-to-ucloud-client.conf 
proto tcp-client
dev tun
remote 106.75.33.142
rport 1201
ifconfig 10.200.0.2 10.200.0.1

remote-cert-tls server
tls-client
tls-auth /etc/openvpn/client/certs/ta.key 1
ca /etc/openvpn/client/certs/ca.crt
cert /etc/openvpn/client/certs/client-ucloud.crt
key /etc/openvpn/client/certs/client-ucloud.key

persist-key
persist-tun
cipher AES256
auth SHA512
user openvpn
group openvpn
keepalive 10 60
ping-timer-rem
verb 3
daemon
log-append /etc/openvpn/logs/company-to-ucloud-client.log

route 10.19.0.0 255.255.0.0

启动

1
2
3
4
5
# server
/usr/sbin/openvpn --config /etc/openvpn/server/ucloud-to-company-server.conf

# client
/usr/sbin/openvpn --config /etc/openvpn/client/company-to-ucloud-client.conf

开机自启动

1
2
3
4
5
6
7
chmod +x /etc/rc.d/rc.local

# server
echo '/usr/sbin/openvpn --config /etc/openvpn/server/ucloud-to-company-server.conf' >> /etc/rc.local

# client
echo '/usr/sbin/openvpn --config /etc/openvpn/client/company-to-ucloud-client.conf' >> /etc/rc.local

4.Question & Answer

Q1:为什么站点间使用 TCP来建立 tun隧道?

我们都知道 TCP 是可靠的传输,这种站点间的常驻性质的数据通道更加需要 TCP 的这种可靠性质。

Q2:两个站点间监听的 TCP端口如何防止公网的恶意扫描?

  1. 两个站点间的防火墙对 1201 端口限制访问源。
  2. 1201 端口会自动关闭:OpenVPN 的特性,在成功建立加密隧道后 Initialization Sequence Completed,两端的站点会自动关闭 1201 端口,因为此时此刻点到点的模式已经建立完成,不需要再去监听端口为谁来提供服务了。

不信你可以去两台站点上 netstat -lntup 分别查看还有没有 1201 端口,而却可以 ping 通对端的隧道 ip 地址。

服务器上没有启动端口,又何谈来的恶意扫描?只有在隧道意外中断时,OpenVPN Server 端的端口才会再次启动 Listening。