我在 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
部分中进行了以下修改:
- 添加了以下行以允许端口 1194 上的传入 UDP 流量:
-A INPUT -p udp --dport 1194 -j ACCEPT
- 注释掉该行
-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
本指南针对 Oracle Cloud 上的 OpenVPN 服务器进行了专门的设置。
https://blogs.oracle.com/developers/post/launching-your-own-free-private-vpn-in-the-oracle-cloud