OpenVPN配置同时支持TCP和UDP协议

一、使用背景:

我们有许多终端需要和服务端通信,为了不直接向公网公开服务器的业务端口,所以配置了一条虚拟局域网用于终端通信。选用了当前普遍使用的UDP协议,因为终端部署在世界各地,有些地方的网络供应商对联网进行了限制,不能使用UDP协议,所以需要在这基础上增加一个TCP协议。而且还需要保障当前已分配的固定IP正常工作。

二、方案选型:

基于此背景,我决定对当前的服务改造,使其同时通过1194端口接受TCP和UDP的请求,当前的openvpn服务是通过yum安装在centos7。

三、方法:

3.1. 修改配置文件:

[root@localhost server]# pwd
/etc/openvpn/server
[root@localhost server]# cat udp.conf
local 192.168.1.2
port 1194
proto udp
dev tunudp
ca ca.crt
cert server.crt
key server.key
dh dh.pem
auth SHA512
tls-crypt tc.key
topology subnet
server 192.168.162.0 255.255.254.0
client-config-dir ipp
push "redirect-gateway def1 bypass-dhcp"
log /var/log/openvpn-udp.log
ifconfig-pool-persist ippudp.txt
keepalive 10 120
cipher AES-256-CBC
user nobody
group nobody
persist-key
persist-tun
verb 3
crl-verify crl.pem
explicit-exit-notify
[root@localhost server]# cat tcp.conf
local 192.168.1.2
port 1194
proto tcp
dev tuntcp
ca ca.crt
cert server.crt
key server.key
dh dh.pem
auth SHA512
tls-crypt tc.key
topology subnet
server 192.168.162.0 255.255.254.0
client-config-dir ipp
push "redirect-gateway def1 bypass-dhcp"
log /var/log/openvpntcp.log
ifconfig-pool-persist ipptcp.txt
keepalive 10 120
cipher AES-256-CBC
user nobody
group nobody
persist-key
persist-tun
verb 3
crl-verify crl.pem

3.2.修改/usr/lib/systemd/system下面服务文件:

[root@localhost system]# cat openvpn-udp.service
[Unit]
Description=OpenVPN service for %I
After=syslog.target network-online.target
Wants=network-online.target
Documentation=man:openvpn(8)
Documentation=https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
Documentation=https://community.openvpn.net/openvpn/wiki/HOWTO

[Service]
Type=notify
PrivateTmp=true
WorkingDirectory=/etc/openvpn/server
ExecStart=/usr/sbin/openvpn --config /etc/openvpn/server/udp.conf
CapabilityBoundingSet=CAP_IPC_LOCK CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW CAP_SETGID CAP_SETUID CAP_SYS_CHROOT CAP_DAC_OVERRIDE CAP_AUDIT_WRITE
LimitNPROC=10
DeviceAllow=/dev/null rw
DeviceAllow=/dev/net/tun rw
ProtectSystem=true
ProtectHome=true
KillMode=process
RestartSec=5s
Restart=on-failure

[Install]
WantedBy=multi-user.target
[root@localhost system]# cat openvpn-tcp.service
[Unit]
Description=OpenVPN service for %I
After=syslog.target network-online.target
Wants=network-online.target
Documentation=man:openvpn(8)
Documentation=https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
Documentation=https://community.openvpn.net/openvpn/wiki/HOWTO

[Service]
Type=notify
PrivateTmp=true
WorkingDirectory=/etc/openvpn/server
#ExecStart=/usr/sbin/openvpn --status %t/openvpn-server/status-%i.log --status-version 2 --suppress-timestamps --config %i.conf
ExecStart=/usr/sbin/openvpn --config /etc/openvpn/server/tcp.conf
CapabilityBoundingSet=CAP_IPC_LOCK CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW CAP_SETGID CAP_SETUID CAP_SYS_CHROOT CAP_DAC_OVERRIDE CAP_AUDIT_WRITE
LimitNPROC=10
DeviceAllow=/dev/null rw
DeviceAllow=/dev/net/tun rw
ProtectSystem=true
ProtectHome=true
KillMode=process
RestartSec=5s
Restart=on-failure

[Install]
WantedBy=multi-user.target

3.3.此时执行

systemctl daemon-reload
systemctl enable openvpn-udp --now
systemctl enable openvpn-tcp --now

到这个时候两个服务都已经可以正常接受外部设备的注册了。

标题四、

按上述的操作完可以接受外部的请求,但是如果先启动udp再启动tcp的话,会导致udp注册的客户端无法连接,我们需要给每个IP设置固定的路由。
在/etc/openvpn/server/ipp目录下进行设置:

[root@localhost system]# cd /etc/openvpn/server/ipp/
[root@localhost ipp]# ls
udp1726  udp1757
[root@localhost ipp]# cat udp1757
ifconfig-push 192.168.162.30 255.255.254.0

我们给udp1757这个用户定义了一个IP 192.168.162.30 而且从名字来看它是一个udp用户
执行如下命令添加一条路由规则:

ip route add 192.168.162.30/32 via 0.0.0.0 dev tunudp

解析:tunudp这是我们在udp.conf里面指定的udp模式启动后使用的设备。
如果有其他的需求,我们只需要添加类似的路由规则即好了,如果要对某个终端的网络模式进行修改,只需要执行

ip route replace 192.168.162.30/32 via 0.0.0.0 dev tuntcp

需要做的更多的就是怎样把这一系列集成到用户名的颁发里面了,就不再细说。

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值