转发传入 RDP(端口 3389)与 LAN 计算机的通信

转发传入 RDP(端口 3389)与 LAN 计算机的通信

没有流量将是外部的(面向互联网),所有流量将是内部的。

我想要实现的是从 WINDOWS PC 1 进行 RDP,将来自 WINDOWS PC 1 的 RDP 流量伪装成 Linux 服务器 IP 地址 (10.0.2.5),然后从那里继续到达目标 WINDOWS PC 2。

这是一张图片来进一步说明:

    WINDOWS PC 1 (10.0.2.122)
             |
           [RDP]
             |
             V
 LINUX SERVER (10.0.2.5)
             |
         [FW 3389]
             |
             V
   WINDOWS PC 2 (10.0.2.188)

我尝试过的

  • 我已经在内核中启用了端口转发:sysctl net.ipv4.ip_forward=1
  • 我已经尝试了许多论坛的几个答案,但仍然不行:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 3389 -j DNAT --to 10.0.2.188:3389 iptables -A FORWARD -p tcp --dport 3389 -d 10.0.2.188 -j ACCEPT

  • 我观察了 iptables 计数器,没有看到任何活动:watch 'iptables -vL'

答案1

看完你的评论后,看来这两台电脑是同一台电脑的一部分局域网(LAN)。这就是为什么您看不到来自 Linux Box 的流量的原因。

本教程将教您 LAN 的基础知识,但使其变得简单:

  • 这些计算机将通过以下方式相互了解ARP
  • 他们会“看到”他们属于同一个局域网并且会直接交谈
  • 如果您的 Linux 机器是网关,它将仅用于路由不属于该 lan 的流量(超出10.0.2.0/24或您定义的任何掩码)

太,博士:这些计算机位于同一个 LAN 上,因此,要查看来自 Linux 机器的一些流量(并且您将无法“拦截/破坏”,只需查看”),您必须将 Linux 网卡置于 promisc 模式:ip link set dev eth0 promisc on

好的。通过所有这些理论知识,当您在同一个局域网内创建一个DNAT内部时,您将必须使用 SNAT“强制”将数据包返回到其起源。这是一种特殊情况,即在执行 NAT 时同一 LAN 上有 2 台计算机。

iptables -t nat -A PREROUTING -p tcp --dport 3389 -j DNAT --to-destination 10.0.2.188:3389
iptables -t nat -A POSTROUTING -p tcp -d 10.0.2.188 --dport 3389 -j SNAT --to-source 10.0.2.122

通过这种方式,您将强制执行,当数据包返回到您的 Linux 机器时,将执行 Source nat10.0.2.122

其他替代方案:

做一个具有 HA 代理的 RDP 代理并将这些主机放在不同的网络上。这是一种过度杀伤力(创建单个成员 rdp 代理余额),但它是一种替代方案。

答案2

HAProxy 解决方案

比照。Microsoft 远程桌面服务 (RDS) 负载平衡

sudo apt install haproxy

cat << EOF | sudo tee -a /etc/haproxy/haproxy.cfg
frontend ft_rdp
    mode tcp
    bind :3389 name rdp
    timeout client 1h
    log global
    option tcplog
    tcp-request inspect-delay 2s
    tcp-request content accept if RDP_COOKIE
    default_backend bk_rdp

backend bk_rdp
    mode tcp
    balance leastconn
    persist rdp-cookie
    timeout server 1h
    timeout connect 4s
    log global
    option tcp-check
    tcp-check connect port 3389 ssl
    default-server inter 3s rise 2 fall 3
    server windows_pc_2 10.0.2.188:3389 weight 10 verify none
EOF

sudo systemctl restart haproxy
systemctl list-units | grep haproxy

相关内容