基于 Linux IPTables 的反向代理

基于 Linux IPTables 的反向代理

我在 VPS 和住宅网络连接上有 2 个公共 IP:

VPS =55.55.55.55

住宅 =66.66.66.66

所有这些操作都在 VPS 上完成Debian 11系统只需最少的改变。

我希望与外部公共部门建立联系55.55.55.55超过端口 8888注定66.66.66.66并让会话流量从 66.66.66.66 到55.55.55.55

基本上我想在55.55.55.55但我不想让人们知道我的真实 IP,因为我打算使用66.66.66.66作为 IPS 安全性(尚未设置/安装)。

                                     [VPS]
                                  66.66.66.66
                                    |     |
                                    |     |
                                    |     |
              -----------------------     -----------------------
              |                                                 |
         55.55.55.55                                    Ex. 234.123.166.123
[Residential ISP Connection]                                [Internet]

据我所知,我运行了以下命令,它们应该可以工作,但似乎只接收了流量,没有转发。

## Clear all entries and add ssh
sudo iptables -P INPUT ACCEPT && \
sudo iptables -P FORWARD DROP && \
sudo iptables -P OUTPUT ACCEPT && \
sudo iptables -t nat -F && \
sudo iptables -t mangle -F && \
sudo iptables -F && \
sudo iptables -X && \
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT && \
sleep 1 && \
sudo iptables-save 

## Allow Traffic
sudo iptables -A INPUT -p tcp --dport 8888 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT

## Setup NAT
sudo iptables -t nat -A PREROUTING -i ens3 -p tcp --dport 20071 -j DNAT --to-destination 55.55.55.55:8888
sudo iptables -t nat -A POSTROUTING -p tcp -m tcp --dport 20071 -j SNAT --to-source 66.66.66.66

## Save
sudo iptables-save 

再次,我可以看到端口进入的流量8888来自外部互联网,但没有留下任何东西,55.55.55.55防火墙没有收到任何来自66.66.66.66(当然除了 ssh)。

非常感谢。

答案1

iptables 的工作级别与反向代理不同 - 您的设置不会导致 VPS 本身接受 TCP 连接;它会在 IP 级别重定向各个数据包。(基本上,保存 NAT 规则的链被命名为“预路由”是有原因的......)

换句话说,应用 DNAT 的流量不再输入交通——它变成了转发流量。这意味着你的“输入”规则在这里无关紧要,你需要的是一条“转发”规则,允许数据包发送到新的 DNAT 目的地,以及另一条允许回复也从该主机发送。

目前,FORWARDiptables 规则集中的整个表包括:

iptables -P FORWARD DROP

所以数据包无法转发。


一般来说,我不建议这样做;通常最好隧道数据包未经修改,这样您的主服务器就能够看到原始客户端 IP 地址(而不是认为所有连接都来自 VPS)。您可以使用纯文本隧道(例如 GRE)或加密隧道(例如 WireGuard 或 OpenVPN)。

相关内容