我有一个连接到 openvpn 服务器的 debian 虚拟机。目前,我有一个在 iptable 上运行良好的终止开关,并且 vpn 连接没有任何问题。现在让我们分享此配置:
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -i ens -s 255.255.255.255 -j ACCEPT
-A INPUT -p tcp -i tun0 -s 111.11.11.10 --dport 1234 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -j DROP
-A FORWARD -j DROP
-A OUTPUT -o -lo -j ACCEPT
-A OUTPUT -o ens -d 111.11.11.10 -j ACCEPT
-A OUTPUT -o tun0 -j ACCEPT
-A OUTPUT -o ens -d 24.24.24.16/24 -j ACCEPT
-A OUTPUT -o ens -d 255.255.255.255 -j ACCEPT
-A OUTPUT -j DROP
COMMIT
但现在我正尝试转发网络上虚拟机上运行的服务。我需要从 VPN 服务器上的特定端口授予访问权限。我尝试了网络上的所有教程,但我可能误解了某些内容或做错了某些事情,这就是我寻求帮助的原因。
VPN Interface tun0:
Public ip 111.11.11.10
Public port to forward 1234
Private network ens:
Debian vm ip 24.24.24.16 (so the vm where iptables and the vpn is running)
Destination vm ip 24.24.24.48 (the vm who need to be forwarded through the vpn)
Destination vm port 6789
这是我尝试过的
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A PREROUTING -p tcp --dport 1234 -j DNAT --to 24.24.24.48:6789
iptables -t filter -A FORWARD -p tcp -d 24.24.24.48 --dport 6789 -j ACCEPT
route add -net 24.24.24.0/24 dev tun0
当我使用时iptables -t nat -L -n -v
,这就是我得到的
https://i.stack.imgur.com/65rQF.png
因此,从外部端口传入的数据包长度增加,这意味着预路由应该很好,但我无法从 VPN 到达目标 VM。你能解释一下我遗漏了什么吗
答案1
我需要做一些假设来回答你的问题,但你在这里忽略了一个关键点。你只能修改到达你的服务器的具有 DNAT 规则的连接:
_______________ priv. ___________ private __________
| VPN server | subnet A| | subnet B | dest. VM
| 111.11.11.10 |----------tun0| debian VM|ens--------------|
|--------------| |----------| 24.24.24.0/24 |---------
我在这里假设 tun0 接口使用的子网是私有 IP 空间,不直接拥有公共 IP。您想将目标虚拟机的端口 1234 发布到互联网。
您通过 VPN 重定向所有流量,确保您无法在没有 VPN 连接的情况下访问互联网。这意味着互联网其余部分可见的 IP 是您的 VPN 提供商的公共 IP,即 111.11.11.10 。
现在,假设我想访问您正在发布的端口 1234 上的服务。连接将转到您的 VPN 提供商 - 并且服务器必须知道如何处理该传入连接,否则它将直接丢弃它。这就是您需要在 openvpn 服务器上放置 DNAT 规则的原因...如果该服务器不受您的控制,那么您就倒霉了。