Oracle 雲計算實例上的 OpenVPN 伺服器:路由問題
我有一個在 Oracle 雲“免費層”中執行的 Ubuntu 20.04 LTS 實例。我按照本指南(德語版)在此 VM 上設置了 OpenVPN 。防火牆埠 1194/UDP 打開,IPv4 轉發配置正確(in
/etc/sysctl.conf
和 in/etc/default/ufw
,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
根據“Nmap book”檢測到 ICMP 不可達錯誤。幸運的是,我在付費 VPS 上有另一個 OpenVPN 伺服器,多年來一直執行良好,我掃描了它的埠 1194/UDP,診斷結果是
open|filtered
.我懷疑這個問題與如何在 Oracle Cloud 上配置虛擬網路有關。我的虛擬機有一個 IP 10.0.0.4,因此 OpenVPN 伺服器配置包含一個條目
listen 10.0.0.4
。很可能缺少某些路由設置,因此伺服器無法響應客戶端的連接請求。我的問題是:有人在 Oracle 的雲上成功設置了 OpenVPN 伺服器嗎?如果是,那麼必須執行的額外配置步驟是什麼?
FWIW,我在 Oracle Cloud Web 管理 GUI 的實例詳細資訊 > 附加的 VNIC > 編輯中選中了“跳過源/目標檢查”框。否則網路設置是“標準的”。
回答我自己的問題:
問題在於甲骨文如何設置他們的雲鏡像。決定性的提示來自這個 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 伺服器可以訪問,客戶端可以連接。