Linux

使用 iptables 通過 Linux 機器轉發 RDP:不工作

  • September 18, 2017

我在實現 NAT 的路由器後面有一台 Linux 機器和一台 Windows 機器(該圖可能有點矯枉過正,但製作起來很有趣):

網路設置

我將路由器上的 RDP 埠 (3389) 轉發到 Linux 機器,因為我想審核 RDP 連接。為了讓 Linux 機器轉發 RDP 流量,我編寫了這些 iptables 規則:

iptables -t nat -A PREROUTING -p tcp --dport 3389 -j DNAT --to-destination win-box
iptables -A FORWARD -p tcp --dport 3389 -j ACCEPT

該埠正在偵聽 Windows 機器:

C:\Users\nimmy>netstat -a

Active Connections

 Proto  Local Address          Foreign Address        State
 (..snip..)
 TCP    0.0.0.0:3389           WIN-BOX:0         LISTENING
 (..snip..)

並且埠正在Linux機器上轉發:

# tcpdump port 3389
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
01:33:11.451663 IP shieldsup.grc.com.56387 > linux-box.myapt.lan.ms-wbt-server: Flags [S], seq 94663035, win 8192, options [mss 1460], length 0
01:33:11.451846 IP shieldsup.grc.com.56387 > win-box.myapt.lan.ms-wbt-server: Flags [S], seq 94663035, win 8192, options [mss 1460], length 0

但是,我沒有從外部獲得任何成功的 RDP 連接。埠甚至沒有響應:

C:\Users\outside-nimmy>telnet example.com 3389
Connecting To example.com...Could not open connection to the host, on port 3389: Connect failed

有任何想法嗎?

更新

根據@Zhiqiang Ma,我在nf_conntrack連接嘗試期間查看了 proc 文件,這就是我所看到的(192.168.3.1 = linux-box,192.168.3.5 = win-box):

# cat /proc/net/nf_conntrack | grep 3389
ipv4     2 tcp      6 118 SYN_SENT src=4.79.142.206 dst=192.168.3.1 sport=43142 dport=3389 packets=6 bytes=264 [UNREPLIED] src=192.168.3.5 dst=4.79.142.206 sport=3389 dport=43142 packets=0 bytes=0 mark=0 secmark=0 zone=0 use=2

第二次更新

進入tcpdump路由器,win-box 似乎正在發送一個 RST 數據包:

21:20:24.767792 IP shieldsup.grc.com.45349 > linux-box.myapt.lan.3389: S 19088743:19088743(0) win 8192 <mss 1460>
21:20:24.768038 IP shieldsup.grc.com.45349 > win-box.myapt.lan.3389: S 19088743:19088743(0) win 8192 <mss 1460>
21:20:24.770674 IP win-box.myapt.lan.3389 > shieldsup.grc.com.45349: R 721745706:721745706(0) ack 755785049 win 0

為什麼 Windows 會這樣做?

在 iptables 規則中添加埠?:

iptables -t nat -A PREROUTING -p tcp --dport 3389 -j DNAT --to-destination win-box:3389
iptables -A FORWARD -p tcp --dport 3389 -j ACCEPT

我不太確定是不是這個原因。但我通常這樣做:http ://www.systutorials.com/816/port-forwarding-using-iptables/

你們都可以先嘗試刷新表:iptables -t nat -F; iptables -F 然後添加這兩個規則以防您的 iptables 中的其他規則阻止連接。

你也可以

cat /proc/net/nf_conntrack

並查看那裡的內容。每個轉發連接都有條目。

注意:如果來自 windows 的出站路由預設不通過iptables框,則 MASQUERADE 也是必需的;請參閱下面的評論(您可能需要取消隱藏)。

引用自:https://serverfault.com/questions/210755