%20%E9%80%9A%E4%BF%A1%E3%82%92%20LAN%20%E3%83%9E%E3%82%B7%E3%83%B3%E3%81%AB%E8%BB%A2%E9%80%81%E3%81%99%E3%82%8B.png)
外部へのトラフィックは発生せず (インターネットに接続)、すべてのトラフィックが内部になります。
私が実現しようとしているのは、WINDOWS PC 1 から RDP を実行し、WINDOWS PC 1 からの RDP トラフィックを Linux SERVERS 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
あなたのコメントを読んでみると、その2台のPCは同じものの一部であるようですローカルエリアネットワーク(LAN)これが、Linux ボックスからのトラフィックが表示されない理由です。
このチュートリアルLAN の基礎をわかりやすく説明します。
- これらのコンピュータは、ARP;
- 彼らは同じLANに属していることを「認識」し、直接会話するでしょう
- Linux ボックスがゲートウェイである場合、その LAN に属さないトラフィック (
10.0.2.0/24
定義したマスク以外) をルーティングするためにのみ使用されます。
要約: これらのコンピューターは同じ LAN 上にあるため、Linux ボックスからのトラフィックを確認するには (「傍受/改変」はできず、確認するだけです)、Linux NIC をプロミスク モードに設定する必要があります。ip link set dev eth0 promisc on
わかりました。この理論的なことすべてを踏まえて、同じ LAN 内でパケットを作成する場合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ボックスに戻ってきたときに、ソースNATが実行され、10.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