是的,我知道。呃!
我有一个小办公室,我们正在努力减少网络开支。
由于客户审核要求,我们运行自己的邮件服务器,并希望保持这种状态。为此,我们需要两个静态 IP。到目前为止,我们已经与 ISP 签订了针对办公网络的“静态 IP 业务计划”。服务不太好。
我想将办公室连接切换到我能找到的最便宜/最快的动态计划;有很多选择。但这意味着放弃邮件服务器的静态 IP。
我们在云端还有一个小型 VPS,用于搭建一个简单的网站。它没有足够的资源来托管我们的邮件服务器,但它确实有 2 个静态 IP。
我想建立一个“隧道”,使用 VPS 的静态 IP 作为我们邮件服务器的公开可见 IP 地址,并连接到实际的邮件服务器 - 现在在我们的 LAN 上,使用动态 IPv4 后面的 NAT。
经过大量的阅读,我想到的方法是使用 OpenVPN 将办公室的邮件服务器(使用本地 OpenVPN 客户端)连接到在 VPS 上运行的 OpenVPN 服务器 - 全部通过由隧道代理(HE.net)提供的“静态”IPv6,并且独立的我们的 ISP。
我设法设置了 IPv6 隧道。以及 OpenVPN 服务器和客户端。我甚至可以通过 IPv6 在两者之间建立连接
此时,我陷入了困境——我完全迷失在路由中(我想!),需要让 VPS 上的外部 IPv4 地址与邮件服务器通过 IPv6 链接监听的内部 IPv4 地址进行通信和监听。
我在网上找到了很多文章,但它们似乎都说“只需在客户端和服务器之间建立 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 |
------------------------------------
具体目标是让来自互联网/WAN 的消息流量到达 VPS 上的“公共 IP”
IPv4 = x.y.z.63 port 25
IPv6 = 2100:...:0444:1 port 25
立即重定向到监听的“邮件服务器”,并且,
来自邮件服务器的流量被正确地路由到“公共 IP”,看起来好像源自那些外部 IP。
按照我在网上和 OpenVPN 手册中找到的示例,我已经能够使部分想法发挥作用,但是一旦我添加了 IPv6 隧道,我却无法设置客户端路由、推送路由等,也无法让流量流动。
答案1
如果您要在 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。假设 VPS 站点的 IPv6 公有地址为 [2001:abcd:1::] 假设客户端站点的 IPv6 公有地址为 [2001:abcd:2::] 假设 VPS 边缘的 IPv4 隧道地址为 10.1.100.1,客户端边缘的 IPv4 隧道地址为 10.1.100.2
笔记:这有点像伪代码,但与思科配置非常接近。我手头没有等效的 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 字节)。
答案2
为什么不让办公室服务器只在 IPv6 上发送入站邮件 (SMTP),并使用 VPS 作为双栈的后备?支持 IPv6 的发件人可以直接发送到办公室服务器,其他人可以发送到 VPS,然后 VPS 会通过 IPv6 将其中继到办公室。