乐趣区

OpenVPN同时监听TCP和UDP端口

OpenVPN 同时监听 TCP 和 UDP 端口

作者: 黄高明
日期: 2019-05-22
类别: vpn 系列
标题: OpenVPN 同时监听 TCP 和 UDP 端口

[TOC]

背景

因为公司是通过动态拨号上网,没有固定的外网地址,所以 VPN 是通过映射到内网来实现。
由于 udp 在防火墙层被拦截,所以部署完 openvpn 同时开启了 tcp 端口

实现方法

1. 配置文件

把 /etc/openvpn/server.conf 复制一份,比如 /etc/openvpn/tcp.conf,然后修改 tcp.conf:

  • 协议修改为 TCP:proto tcp
  • IP 地址修改略作修改,比如所有原来是 10.8.0.x 的地方,都改为 10.8.1.x

2. 修改防火墙

然后修改 iptables,增加一条 nat 规则 -A POSTROUTING -s 10.8.1.0/24 -o eth0 -j MASQUERADE。
iptables -t nat -A POSTROUTING -s 10.8.1.0/24 -o eth0 -j MASQUERADE

3. 启动进程

 /usr/sbin/openvpn --cd /etc/openvpn/ --config tcp.conf

4. 添加开机启动

/etc/systemd/system/openvpntcp@.service

[Unit]
Description=OpenVPN Robust And Highly Flexible Tunneling Application On %I
After=network.target

[Service]
Type=notify
PrivateTmp=true
ExecStart=/usr/sbin/openvpn --cd /etc/openvpn/ --config tcp.conf

[Install]
WantedBy=multi-user.target

重载服务,添加为开启启动

systemctl daemon-reload
systemctl restart openvpntcp@server
systemctl enable openvpntcp@server
systemctl  list-unit-files |grep openvpntcp

客户端 ovpn 配置

生成的客户端配置,只需要修改 udp 为 tcp.
其中如果 remote 有 2 个的话,代表负载均衡,如果其中一个连接不上,会自动连接另外一个

client
proto tcp
remote x.x.x.x 11111
remote x.x.x.x 12222 
......
退出移动版