Openvpn

Oracle 雲計算實例上的 OpenVPN 伺服器:路由問題

  • January 13, 2022

我有一個在 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部分中進行了以下修改:

  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 伺服器可以訪問,客戶端可以連接。

引用自:https://serverfault.com/questions/1029552