架構圖

雲端主機設定
使用者帳號建立(專門用來 SSH RDP)
新增一個使用者
#雲端server
adduser rdp-tunnel
密碼:先隨意設一個,之後會停用密碼登入
其他資訊:直接 Enter

在自己本機先創建一組金鑰
linux 使用
passphrase:可空白(方便)或自己決定
#本地端
ssh-keygen -t ed25519 -f rdp_key
powershell 使用
passphrase:可空白(方便)或自己決定
#本地端
ssh-keygen -t ed25519 -f rdp_key
印出顯示公鑰並複製
#本地端
type rdp_key.pub

在雲端主機建立 .ssh 目錄
#雲端server
mkdir -p /home/rdp-tunnel/.ssh
chmod 700 /home/rdp-tunnel/.ssh
在雲端主機貼上之前複製的公鑰
#雲端server
nano /home/rdp-tunnel/.ssh/authorized_keys

貼上複製的一整行 ssh-ed25519 …

變更權限
#雲端server
chown -R rdp-tunnel:rdp-tunnel /home/rdp-tunnel/.ssh
chmod 700 /home/rdp-tunnel/.ssh
chmod 600 /home/rdp-tunnel/.ssh/authorized_keys

本機 PowerShell 驗證
#本地端
ssh -i rdp_key rdp-tunnel@cloud_server_IP
可以登入

限制 rdp-tunnel 帳號能力
編輯 ssh 設定
#雲端server
nano /etc/ssh/sshd_config
#下面加上
Match User rdp-tunnel
AllowTcpForwarding yes
X11Forwarding no
PermitTTY no
ForceCommand /bin/false

重啟 ssh
#雲端server
systemctl restart ssh
本機 PowerShell 驗證
#本地端
ssh -i rdp_key rdp-tunnel@cloud_server_IP
無法登入

設定 server 自動將特定 port 流量轉發到公司 firewall
安裝 socat
#雲端server
sudo apt install socat
建立 systemd 服務
#雲端server
sudo nano /etc/systemd/system/rdp-forward.service
#貼上
[Unit]
Description=RDP Port Forward
After=network.target
[Service]
ExecStart=/usr/bin/socat TCP-LISTEN:13339,bind=0.0.0.0,fork TCP:公司公網防火牆ip:20000
Restart=always
[Install]
WantedBy=multi-user.target

啟用服務
#雲端server
sudo pkill socat
sudo systemctl daemon-reload
sudo systemctl enable --now rdp-forward

進階限制
限制 rdp-tunnel 只能映射 13337
#雲端server
sudo nano /home/rdp-tunnel/.ssh/authorized_keys
#前面加上
permitopen="127.0.0.1:13337",no-agent-forwarding,no-X11-forwarding,no-pty ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... rdp-tunnel-key

重啟 ssh
#雲端server
sudo systemctl restart ssh
Firewall 設定
設定 port forwarding

設定虛擬 ip

設定 ip 來源位置
位置物件 ip

設定防火牆政策
設定防火牆政策

內網主機設定
開啟 RDP



說些什麼吧!