Oracle 云计算实例上的 OpenVPN 服务器:路由问题

Oracle 云计算实例上的 OpenVPN 服务器:路由问题

我在 Oracle Cloud“免费套餐”中运行了一个 Ubuntu 20.04 LTS 实例。我按照以下步骤在此虚拟机上设置了 OpenVPN本指南(德语)。防火墙端口 1194/UDP 已打开,IPv4 转发已正确配置(在/etc/sysctl.conf和 中,UFW 还通过以下咒语/etc/default/ufw进行转发:/etc/ufw/before.rules

# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to ens3
-A POSTROUTING -s 10.27.0.0/8 -o ens3 -j MASQUERADE
COMMIT
# END OPENVPN RULES

ifconfig服务器上的输出:

ens3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9000
        inet 10.0.0.4  netmask 255.255.255.0  broadcast 10.0.0.255
        inet6 fe80::200:17ff:fe02:52db  prefixlen 64  scopeid 0x20<link>
        ether 00:00:17:02:52:db  txqueuelen 1000  (Ethernet)
[....]
tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1500
        inet 10.27.0.1  netmask 255.255.255.0  destination 10.27.0.1
        inet6 fe80::b07f:586a:c721:fddb  prefixlen 64  scopeid 0x20<link>

看起来不错。问题是客户端无法连接到服务器,日志显示“TLS 错误:TLS 密钥协商在 60 秒内失败”。

当我运行时sudo tcpdump -ni ens3 udp and port 1194,我可以看到数据包确实从客户端(IP 地址“XXXX”)到达:

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode 
listening on ens3, link-type EN10MB (Ethernet), capture size 262144 bytes
14:18:08.024761 IP X.X.X.X.20800 > 10.0.0.4.1194: UDP, length 54

当我使用以下命令扫描 OpenVPN 服务器时nmap

sudo nmap -sU -p 1194 problematic.server.ip.address

那么端口 1194/UDP 被诊断为filtered。这意味着nmap根据以下情况检测到 ICMP 不可达错误“Nmap 手册”

幸运的是,我在付费 VPS 上有另一个 OpenVPN 服务器,多年来一直运行良好,我扫描了它的端口 1194/UDP,诊断结果是open|filtered

我怀疑问题与 Oracle Cloud 上的虚拟网络配置方式有关。我的 VM 有一个 IP 10.0.0.4,因此 OpenVPN 服务器配置包含一个条目listen 10.0.0.4。很可能缺少某些路由设置,因此服务器无法响应客户端的连接请求。

我的问题是:有人在 Oracle 云上成功设置了 OpenVPN 服务器吗?如果是,那么必须执行哪些额外的配置步骤?

值得一提的是,我在 Oracle Cloud Web 管理 GUI 中的“实例详细信息”>“附加 VNIC”>“编辑”中选中了“跳过源/目标检查”框。否则,网络设置是“标准”的。

答案1

设置 VCN 出口规则。汉堡包 -> 网络 -> 虚拟云网络。单击 VCN、安全列表,然后单击“默认安全列表”(除非您将其命名为其他名称)。

添加允许目标端口 1194 的入站规则和源端口 1194 的出站规则。

答案2

回答我自己的问题:

问题出在 Oracle 设置云镜像的方式上。决定性的提示来自这个 PHP 开发人员博客:他们无法访问 Oracle 云计算实例上的端口 80 (!)。他们的解决方案是“清除”IP 表。

我选择了一个不太激进的解决方案。Oracle 提供的 Ubuntu 映像使用 Debian 包iptables-persistent在重新启动之间保存 IP 表(请参阅此 UNIX StackExchange 帖子)。我查看了/etc/iptables/rules.v4存储设置的文件,并在该*filter部分中进行了以下修改:

  1. 添加了以下行以允许端口 1194 上的传入 UDP 流量:-A INPUT -p udp --dport 1194 -j ACCEPT
  2. 注释掉该行-A FORWARD -j REJECT --reject-with icmp-host-prohibited并允许 IP 转发-A FORWARD -j ACCEPT

完整部分现在如下所示:

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [463:49013]
:InstanceServices - [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p udp --sport 123 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
### OpenVPN rule
-A INPUT -p udp --dport 1194 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
### Let everything be forwarded
-A FORWARD -j ACCEPT
### -A FORWARD -j REJECT --reject-with icmp-host-prohibited

“激活”更改:

/sbin/iptables-restore < /etc/iptables/rules.v4

现在可以了,OpenVPN 服务器可以访问,客户端可以连接。

答案3

相关内容