Ssh

通過 ssh 隧道進行 IP 轉發

  • September 24, 2016

情況涉及3台機器:

  • A某台筆記型電腦通過任何方式連接到網際網路
  • B通過標準 ISP 連接到 Internet 的伺服器(dyndns 提供的靜態 IP:myserver.dyndns.com)
  • C另一台伺服器通過 4G 加密狗連接到網際網路

A <— ISP1 — ISP 2 —> B <— ISP 2 — 4G —> C

由於 4G 加密狗拒絕新的傳入連接,我設置了一個autossh通道以通過 B 從 A 連接到 C:

autossh -M 0 -N user@myserver.dyndns.com -R 10022:127.0.0.1:22 -R 10000:127.0.0.1:10000

這很好用。

現在,我想通過鍵入來訪問 4G 加密狗的 Web 界面

myserver.dyndns.com:80

所以我嘗試了 NATing 的東西:

  • B上:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:10000

iptables -t nat -A POSTROUTING -d 127.0.0.1 --dport 10000 -j MASQUERADE`
  • C上:
iptables -t nat -A PREROUTING -p tcp --dport 10000 -j DNAT --to-destination 192.168.8.1:80

iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

注:eth1是4G dongle的介面,C在該介面的IP是192.168.8.100,dongle的IP是192.168.8.1。

不幸的是,這不起作用。我還啟動了 IP 轉發:

echo 1 &gt; /proc/sys/net/ipv4/ip_forward

打字的時候

iptables -t nat -L -v -n

BC上,只有B的 PREROUTING 行在每次嘗試後看到其數據包計數增加。

這可能是由於對如何netfilter工作的理解不完整。

我會很感激你能提供的任何幫助!

iptables -t filter -nvL請問,你能在伺服器 B 和 C 上提供輸出嗎?

我猜該autossh頻道在伺服器 C 上執行。對嗎?如果是這樣,我建議採用不同的方法。在 B 上,您需要一個 REDIRECT 規則,因為核心不允許非特權使用者打開埠 80。

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 10000
iptables -t filter -A INPUT -p tcp --dport 10000 -j ACCEPT

(編輯):在伺服器 B 上,GatewayPorts必須在以下位置啟用/etc/ssh/sshd_config

# /etc/ssh/sshd_config
GatewayPorts clientspecified

autossh在伺服器 C 上,通過修改參數將連接直接轉發到加密狗:

autossh -M 0 -N user@myserver.dyndns.com -R 10022:127.0.0.1:22 \
   -R :10000:192.168.8.1:80

我在您的設置中看到的唯一錯誤在於PREROUTING伺服器 C 的鍊式規則。在這種情況下,它不會被評估,因為它只影響通過網路介面進入的數據包。by 創建的連接ssh是本地生成的,因此它們會受到OUTPUT鏈中規則的影響。

引用自:https://unix.stackexchange.com/questions/267952