在 VPN 客户端上运行电子邮件服务器,希望从 VPN 服务器传输 smtp、pop3、imap 等流量。

在 VPN 客户端上运行电子邮件服务器,希望从 VPN 服务器传输 smtp、pop3、imap 等流量。

我有一个家庭宽带网络,并且还运行着一个电子邮件服务器。由于我的提供商不会给我一个固定的 IP 地址,而且大多数服务器拒绝接受来自动态 IP 范围的 smtp 邮件,我觉得最简单的解决方案就是在我已有的虚拟服务器和我的邮箱之间运行 VPN。

我做得很好,我安装了 openvpn,连接正常。我的家庭网络运行在 192.168.1.x 上,vpn 运行在 10.8.0.x 上,客户端(我的邮件服务器)在隧道末端的地址为 10.8.0.6。vps 在互联网端有一个真实世界的 ip 地址。

我启用了 IP 转发,并且可以愉快地从客户端、电子邮件、网页浏览等发送流量,但我不知道如何通过 smtp、imap、pop3 等端口将互联网上的流量转发到我的邮件服务器。

我希望我已经提供了足够的信息。

提前致谢。

答案1

对于所有端口:

iptables -t nat -A PREROUTING -p tcp --dport 25 -d $real_world_ip -j DNAT --to-destination 10.8.0.6
iptables -t nat -A POSTROUTING -p tcp --dport 25 -d 10.8.0.6 -j SNAT --to-source 10.8.0.x
iptables -A FORWARD -p tcp --dport 25 -d 10.8.0.6 -j ACCEPT

编辑1(评论回答)

可以让邮件服务器看到原始地址(这很简单,你只需要忽略 SNAT 规则)。挑战在于将回复数据包返回到虚拟服务器。为此,你需要高级路由。我想你还需要 Netfilter 连接标记。你标记来自虚拟服务器的所有新连接,将连接标记复制到数据包标记,并使用数据包标记进行路由决策。你需要在 /etc/iproute2/rt_tables 中定义一个额外的路由表。你可以将其命名为 to_vserver。

iptables 会阻止每个端口,其他端口只阻止一次。

# mark new connections from VPN interface
iptables -t nat -A PREROUTING -i tun0 -p tcp --dport 25 -j CONNMARK --set-mark 42
# set packet mark of outgoing locally created packets which have this connection mark
iptables -t mangle -A OUTPUT -m connmark --mark 42 -j CONNMARK --restore-mark

# in this routing table: send everything over the VPN
ip route add table to_vserver 10.8.0.x dev tun0 src  10.8.0.6
ip route add table to_vserver default via 10.8.0.x

# use routing table to_vserver (instead of main) for every packet with this packet mark
ip rule add fwmark 42 priority 100 table to_vserver

答案2

所有流量都通过 vpn 运行 这是正确的 Windows 7 和 dd-wrt ​​设置

服务器配置:

server 172.20.20.0 255.255.255.248
push "dhcp-option DNS 192.168.0.1"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
dev tun0
proto tcp
port 443
keepalive 15 30

daemon
verb 0
mute 5
comp-lzo
duplicate-cn
tls-server

dh /tmp/openvpn/dh.pem
ca /tmp/openvpn/ca.crt
cert /tmp/openvpn/cert.pem
key /tmp/openvpn/key.pem
tls-auth /tmp/openvpn/ta.key 0

management localhost 14

客户端配置:

client
dev tun0
proto tcp
port 443
remote xxx.xxx.xxx.xxx 443
remote xxx.xxx.xxx.xxx 443
nobind
persist-key
persist-tun
ns-cert-type server
comp-lzo
verb 3
ca ca.crt
cert client1.crt
key client1.key
tls-auth ta.key 1

DD-wrt ​​防火墙:

iptables -I INPUT 1 -p tcp --dport 443 -j ACCEPT
iptables -I FORWARD 1 --source 172.20.20.0/29 -j ACCEPT

答案3

VPN 不会更改您的公共 IP,让我重复一遍,VPN 不会将您的真实 IP 与家庭 IP 混淆,除非您连接到外部 VPN,这意味着它不是您的家庭 VPN。我的所有流量都成功地通过我之前发布的配置通过我的家庭 dd-wrt ​​VPN 运行。电子邮件、浏览器等。

无需任何端口转发或端口触发器,VPN 是为了安全,VPN 会加密您的数据通道,不会隐藏或掩盖您的 IP。您需要代理来完成该任务,或者通过 VPN 使用 Tor 浏览器来增加安全性。

公众有一个误解,认为 VPN 会以某种方式更改您的公共 IP,但事实并非如此,VPN 像普通路由器一样分配 IP,但现在您的数据通道已加密,您可以通过开放的 wifi 安全地隧道连接到您的家庭或办公室网络。在某些地方的开放 wifi 上,您的 IP 将使用您的家庭 IP,而不是公共 wifi IP。我希望公众现在明白了。

相关内容