通過 IPv6 OpenVPN 連接將 VPS 的靜態 IP 連接到動態 LAN 上的郵件伺服器?
是的,我知道。啊!
我有一個小辦公室,我們正在努力減少我們的網路費用。
由於客戶審核要求,我們執行自己的郵件伺服器,並希望保持這種狀態。為此,我們需要兩個靜態 IP。到目前為止,我們已經與我們的 ISP 為我們的辦公網路制定了“StaticIP 商業計劃”。服務不太好。
我想將辦公室連接切換到我能找到的最便宜/最快的動態計劃;很多選擇。但這意味著放棄我們的郵件伺服器的靜態 IP。
我們在雲中也有一個小型 VPS,用於一個簡單的網站。它沒有足夠的資源來託管我們的郵件伺服器,但確實有 2 個靜態 IP。
我想設置一個“隧道”,使用 VPS 的靜態 IP 作為我們的郵件伺服器的公開可見 IP 地址,並連接到實際的郵件伺服器——現在在我們的 LAN 上,NAT 位於動態 IPv4 後面。
經過大量閱讀後,我正在考慮這樣做的方式是使用 OpenVPN 使用本地 OpenVPN 客戶端將辦公室的郵件伺服器連接到在 VPS 上執行的 OpenVPN 伺服器 - 全部通過由 a 提供的“靜態”IPv6隧道代理(HE.net),獨立於我們的 ISP。
我設法獲得了 IPv6 隧道設置。以及 OpenVPN 伺服器和客戶端。我什至可以通過 IPv6 在兩者之間建立連接
在這一點上,我被困住了——我完全迷失在需要讓 VPS 上的外部 IPv4 地址與郵件伺服器正在偵聽的內部 IPv4 地址對話和收聽所需的路由中(我想!) IPv6 連結。
我在網上找到了一堆文章,但他們似乎都在說“只是在客戶端和伺服器之間建立一個 OpenVPN 連接”,根本沒有提供太多細節——無論如何我都能理解 :-(——然後關於完成地址和入站和出站流量的映射,不要說什麼。
VPS 和 Office 路由器上還有一個防火牆。我什至還沒有開始考慮我需要為 VPN 上的 IMAP 和 SMTP 流量打開什麼…
有人可以分享一個文件,或者幫助一個很好的演練在這裡做什麼,以及如何做?
作為參考,我的網路佈局是:
------------------------------------ | VPS Server | | eth0: | | IPv4 = 172.16.10.100 | | IPv6 = 2100:...:0444::100 | | tun1: | | IPv6 = 2199:...:1 | ------------------------------------ | | | | | --------------------------------- | | eth1: | | | IPv4 = 172.16.10.63 | | | IPv6 = 2100:...:0444:2 | | | | | | Server-side Gateway | | | | | | eth0: (PUBLIC IPs) | | | IPv4 = x.y.z.63 | | | IPv6 = 2100:...:0444:1 | | --------------------------------- | | | | | ---------------- VPN | Internet/WAN | | ---------------- | | | | | --------------------------------- | | eth0: | | | IPv4 = a.b.c.24 | | | IPv6 = 2600:...:0123:1 | | | | | | Client-side Gateway | | | | | | eth1: | | | IPv4 = 192.168.1.24 | | | IPv6 = 2600:...:0123:2 | | --------------------------------- | | ------------------------------------ | |-----------------------------| MailServer | | | | eth0: | | | | IPv4 = 192.168.1.199 | | | | IPv6 = 2600:...:0123:199 | | | ------------------------------------ ------------------------------------ | Client | | eth0: | | IPv4 = 192.168.1.100 | | IPv6 = 2600:...:0123:100 | | tun1: | | IPv6 = 2699:...:1 | ------------------------------------
並且具體目標是讓來自 Internet/WAN 的消息流量針對我在 VPS 上的“公共 IP”
IPv4 = x.y.z.63 port 25 IPv6 = 2100:...:0444:1 port 25
立即重定向到正在監聽的“MailServer”,並且,
來自 MailServer 的流量被正確路由到“公共 IP”,似乎來自那些外部 IP。
按照我在網上和 OpenVPN 食譜中找到的範例,我已經能夠讓部分想法發揮作用,但是一旦我添加了 IPv6 隧道,我還沒有獲得客戶端路由的運氣,推送路線等都設置好了,所以交通流量。
如果您要在 VPS 伺服器上執行 TCP 代理,您應該能夠避開 VPN 並通過 IPv6 從 VPS 直接訪問郵件伺服器。
Socat 可以在 Linux 上解決問題:
socat -d -d -lmlocal2 \ TCP4-LISTEN:25,bind=myaddr1,su=nobody,fork,reuseaddr \ TCP6:mail.domain.local:80,bind=myaddr2
或 Windows 上的 netsh:
netsh interface portproxy add v4tov6 listenport=25 connectaddress=mail.domain.local connectport=25 protocol=tcp
兩者都會將與 VPS 伺服器的 IPv4 地址建立的連接轉發到郵件伺服器的 IPv6 地址。
如果發件人具有 IPv6 訪問權限,這還將具有跳過 VPS 的額外好處。
如果您一心想要使用沒有埠轉發的 OpenVPN,您將不得不執行以下操作來獲取流量:
- 設置對邊緣主機的 IPv6 訪問
- 在 IPv6 網際網路上設置 v4 p2p 隧道
- 設置路由以允許來自郵件伺服器的所有流量通過隧道流動
- 設置 NAT 以將輔助 v4 地址轉換為郵件伺服器的私有 v4 地址
假設 IPv4 公共地址為 1.2.3.2 和 1.2.3.3,網關為 1.2.3.1。假設 IPv6 公共地址為
$$ 2001:abcd:1:: $$對於 VPS 站點 假設 IPv6 公共地址為$$ 2001:abcd:2:: $$對於客戶端站點 假設 VPS 邊緣的 IPv4 隧道地址為 10.1.100.1,客戶端邊緣的 IPv4 隧道地址為 10.1.100.2 **注意:**這有點虛擬碼,但非常接近 cisco 配置。我手頭沒有等效的 iptables 和 OpenVPN 配置,但它們應該很容易翻譯。
VPS網關:
! gateway acts as a router ip routing ipv6 unicast-routing ! interfaces interface outside ip address 1.2.3.2 255.255.255.248 interface inside ip address 172.16.10.63 255.255.255.0 ipv6 address 2001:abcd:1:1::1 /64 interface tunnel6 ipv6 address 2001:abcd:1::1 tunnel source 1.2.3.2 ! Routing table: ! send traffic for the client net via the openvpn p2p link ip route 192.168.1.0 255.255.255.0 172.16.10.100 ip route 0.0.0.0 0.0.0.0 1.2.3.1 ipv6 route ::0/0 2001:abcd:1::2 ! NAT Table: ! nat the mailserver static (outside,inside) 1.2.3.4 192.168.1.199 netmask 255.255.255.255
VPS伺服器:
! vps server acts as a v4 router ip routing ! interfaces interface inside ip address 172.16.10.100 ipv6 address 2001:abcd:1:1::100 /64 interface tun0 tunnel source 2001:abcd:1:1::100 tunnel destination 2001:abcd:2:1::100 ip address 10.1.100.1 255.255.255.252 ! Routing table: ip route 192.168.1.0 255.255.255.0 10.1.100.2 ip route 0.0.0.0 0.0.0.0 172.16.10.63 ipv6 route ::0/0 2001:abcd:1:1::1
客戶端路由器:
! gateway acts as a router ip routing ipv6 unicast-routing ! interfaces interface outside ip address from dhcp interface inside ip address 192.168.1.24 255.255.255.0 ipv6 address 2001:abcd:2:1::1 /64 interface tunnel6 ipv6 address 2001:abcd:2::1 ! routing ip route 172.16.10.0 255.255.255.0 192.168.1.100 ipv6 route ::0/0 2001:abcd:2::2
客戶端邊緣:
! client edge acts as a v4 router ip routing interface inside ip address 192.168.1.100 255.255.255.0 ipv6 address 2001:abcd:2:1::100 /64 interface tunnel0 tunnel source 2001:abcd:2:1::100 tunnel destination 2001:abcd:1:1::100 ip address 10.1.100.2 255.255.255.252 ip route 172.16.10.0 255.255.255.0 10.1.100.1 ! use pbr to send internet traffic from the mailserver over the vpn access-list 1 permit 192.168.1.199 route-map pbr-mailserver-vpn permit 10 match ip address 1 set ip default next-hop 10.1.100.1 route-map pbr-mailserver-vpn permit 20 set ip default next-hop 192.168.1.24
郵件伺服器:
interface inside ip address 192.168.1.199 255.255.255.0 ! since our default traffic must be natted to the secondary VPS IP, forward over ! client edge to vpn ip route 0.0.0.0 0.0.0.0 192.168.1.100
**注意:**如果您的邊緣路由器支持 GRE 或其他封裝隧道協議,您可以跳過伺服器並在路由器上進行隧道傳輸。但是請記住,客戶端路由器必須能夠根據源地址執行策略路由,以將來自郵件伺服器的流量通過隧道返回。
我將再次強調,與從 v4 到 v6 進行埠轉發相比,這幾乎沒有什麼好處,並且將復雜性增加到了一個荒謬的地步。它還將引入難以追踪的問題,例如非對稱路由、NAT 和多層隧道(這將使 MTU 降低約 400 字節)。