端口转发同时保留源IP?

端口转发同时保留源IP?

我有一个专用服务器,所有东西都在其上运行,但是该专用服务器缺乏 DDoS 保护,因此我购买了随附的 VPS,这样我就可以有效地将其用作代理。

我使用以下命令在 VPS 上设置了端口转发:

iptables -t nat -A PREROUTING -p tcp --dport 30001 -j DNAT --to-destination DEDIIP:30001
iptables -t nat -A POSTROUTING -p tcp -d DEDIIP --dport 21 -j SNAT --to-source VPSIP

连接到 VPSIP 成功,并将我连接到 dedi,但是有一个问题。dedi 显示每个连接都来自同一个 IP(VPS),我有什么办法可以保留原始 IP 吗?

例如:

Now:

CLIENT --> VPS --> Dedi (Shows the clients IP as the VPS)

What I need it to be like

CLIENT --> VPS --> Dedi (Shows the clients IP, just as if the VPS wasn't there)

有人知道该怎么做,或者我哪里做错了吗?

编辑以提供更多信息:

VPS:

的结果ip route show

default via xxx.xxx.xxx.1 dev ens3
xxx.xxx.xxx.0/24 dev ens3  proto kernel  scope link  src xxx.xxx.xxx.138

的结果ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 06:d4:28:00:08:6e brd ff:ff:ff:ff:ff:ff
    inet xxx.xxx.xxx.138/24 brd xxx.xxx.xxx.255 scope global ens3
       valid_lft forever preferred_lft forever
    inet6 fe80::4d4:28ff:fe00:86e/64 scope link
       valid_lft forever preferred_lft forever

IP表:

# Generated by iptables-save v1.6.0 on Tue Nov 29 20:18:46 2016
*nat
:PREROUTING ACCEPT [18637:1487446]
:INPUT ACCEPT [1420:143605]
:OUTPUT ACCEPT [3:228]
:POSTROUTING ACCEPT [8:496]
-A PREROUTING -p tcp -m tcp --dport 21 -j DNAT --to-destination xxx.xxx.xxx.147:30001
-A POSTROUTING -d xxx.xxx.xxx.147/32 -p tcp -m tcp --dport 30001 -j SNAT --to-source xxx.xxx.xxx.138
COMMIT
# Completed on Tue Nov 29 20:18:46 2016
# Generated by iptables-save v1.6.0 on Tue Nov 29 20:18:46 2016
*filter
:INPUT ACCEPT [16718:1768066]
:FORWARD ACCEPT [2016:3102889]
:OUTPUT ACCEPT [11789:4503936]
COMMIT

黛迪:

的结果ip route show

default via xxx.xxx.xxx.254 dev eth0 onlink
xxx.xxx.xxx.0/24 dev eth0  proto kernel  scope link  src xxx.xxx.xxx.147

的结果ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether e0:cb:4e:8c:ab:5d brd ff:ff:ff:ff:ff:ff
    inet xxx.xxx.xxx.147/24 brd xxx.xxx.xxx.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 2001:41d0:8:1a93::/64 scope global
       valid_lft forever preferred_lft forever
    inet6 fe80::e2cb:4eff:fe8c:ab5d/64 scope link
       valid_lft forever preferred_lft forever

IP表:

*filter
:INPUT ACCEPT [31996807:9076994683]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [35073288:16420652529]
:ufw-after-forward - [0:0]
:ufw-after-input - [0:0]
:ufw-after-logging-forward - [0:0]
:ufw-after-logging-input - [0:0]
:ufw-after-logging-output - [0:0]
:ufw-after-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-before-input - [0:0]
:ufw-before-logging-forward - [0:0]
:ufw-before-logging-input - [0:0]
:ufw-before-logging-output - [0:0]
:ufw-before-output - [0:0]
:ufw-reject-forward - [0:0]
:ufw-reject-input - [0:0]
:ufw-reject-output - [0:0]
:ufw-track-forward - [0:0]
:ufw-track-input - [0:0]
:ufw-track-output - [0:0]
-A INPUT -j ufw-before-logging-input
-A INPUT -j ufw-before-input
-A INPUT -j ufw-after-input
-A INPUT -j ufw-after-logging-input
-A INPUT -j ufw-reject-input
-A INPUT -j ufw-track-input
-A FORWARD -j ufw-before-logging-forward
-A FORWARD -j ufw-before-forward
-A FORWARD -j ufw-after-forward
-A FORWARD -j ufw-after-logging-forward
-A FORWARD -j ufw-reject-forward
-A FORWARD -j ufw-track-forward
-A OUTPUT -j ufw-before-logging-output
-A OUTPUT -j ufw-before-output
-A OUTPUT -j ufw-after-output
-A OUTPUT -j ufw-after-logging-output
-A OUTPUT -j ufw-reject-output
-A OUTPUT -j ufw-track-output
COMMIT

答案1

如果您希望代理服务器看到 IP,则代理需要成为代理服务器的网关。

答案2

你的 Dedi 有一个默认路由器 xxx.xxx.xxx.254,不是 VPS,我们称之为 R

如果您没有在 VPS 中使用 SNAT(让真实 IP 到达 Dedi),那么当客户端 C 连接到 VPS IP 上的 FTP 服务时,将会发生以下情况:

C --> VPS --> Dedi
 ^            /
  \<-- R  <--/

客户端 C 将发起与 VPS 的连接,但连接的回复将来自 C 不知道的其他 IP。即使所有设备都共享同一个公共 IP(我不知道这个路由器 R 以及它与 VPS 的关系),端口仍然会出错(30001 而不是 21)。C 将发送 RST(重置)数据包。连接永远不会建立。

因此,如前所述,使其正常工作的唯一方法是让 VPS 看到客户端 C 和 Dedi 之间的传入和传出流量。目前,它是通过向每一方展示自己的 IP 来实现的,而 Dedi 端需要 SNAT。如果 VPS 是 Dedi 的默认路由器,那么它就不必更改客户端的 IP 来获取传出流量。

现在谈几点看法:

  • 任何地方都没有防火墙规则,默认情况下一切都被接受。VPS 只转发 FTP,不转发其他内容,所以没问题。如果 VPS 是默认路由器,则应添加防火墙规则以及 NAT 规则(如果 Dedi 不是公共的),并且默认策略可能必须设置为 DROP
  • 如果您进行此类更改,则可能会失去对 Dedi 的网络访问权限。在进行这些更改期间,您需要托管解决方案提供的直接控制台访问权限。
  • 还有很多未知数。其中有多少是公有 IP 和私有 IP,除了只允许一项服务外,VPS 还能通过哪些方式防止 Dedi 遭受 DDoS 攻击,...

相关内容