Vps

通過 IPv6 OpenVPN 連接將 VPS 的靜態 IP 連接到動態 LAN 上的郵件伺服器?

  • August 7, 2013

是的,我知道。啊!

我有一個小辦公室,我們正在努力減少我們的網路費用。

由於客戶審核要求,我們執行自己的郵件伺服器,並希望保持這種狀態。為此,我們需要兩個靜態 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 字節)。

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