Centos

如何使用 iptables 將本地主機流量轉發到遠端主機?

  • January 7, 2015

我想設置我的 CentOS 6.5 機器,將與 localhost (127.0.0.1) 的連接轉發到遠端機器上的同一埠(例如 10.0.3.10)。

我已經嘗試了下面的 iptables 規則,但是當我嘗試連接時,它只是掛起:

iptables -t nat -I OUTPUT --src 0/0 --dst 127.0.0.1 -p tcp --dport 8888 \
   -j DNAT --to-destination=10.0.3.10:8888

在遠端機器上執行tcpdump,我可以看到沒有傳入流量。我做了一些Google搜尋,但沒有發現任何特別有用的東西。我還確認我的sysctl.conf文件包含net.ipv4.ip_forward = 1.

編輯我添加了日誌記錄以響應以下評論之一。當我轉到 127.0.0.1:8888 時它不產生輸出,但在轉到 10.0.3.10 時確實產生輸出:

# Generated by iptables-save v1.4.7 on Tue Jul 29 12:52:17 2014
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [11:1008]
:OUTPUT ACCEPT [11:1008]
:LOGGING - [0:0]
-A OUTPUT -p tcp -m tcp -d 10.0.3.10 --dport 8888 -j LOGGING
-A LOGGING -j LOG --log-prefix "IPTABLES: "
-A LOGGING -j ACCEPT
-A OUTPUT -d 127.0.0.1/32 -p tcp -m tcp --dport 8888 -j DNAT --to-destination 10.0.3.10:8
888
COMMIT
# Completed on Tue Jul 29 12:52:17 2014
# Generated by iptables-save v1.4.7 on Tue Jul 29 12:52:17 2014
*filter
:INPUT ACCEPT [50:2776]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [49:4336]
COMMIT
# Completed on Tue Jul 29 12:52:17 2014

我不知道如何在這台機器上配置 iptables 來做你想做的事。我通常在這種情況下使用 SSH 隧道。我發現設置起來很容易(個人意見在這裡!);-) 但是……你需要在你的本地主機上有一個 SSH 連接(它不需要從遠端訪問!)。

這種情況下的命令語法是:

ssh -f -C -N -L [<bind address>:]<local port>:<remote host name>:<remote service port> [-p <ssh port>] [<username>@]<remote host outside name>

所以對你來說,這意味著:

ssh -f -C -N -L 127.0.0.1:8888:10.0.3.10:8888 localhost

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