From:https://blog.catcatarb.com/socat-ipv4-ipv6-port/

socat是一個非常強大的多功能命令列工具,它能夠建立幾乎任何類型的連接,包括資料轉送、端口轉發、管道、套接字轉換等。socat可以用於實現IPv4 到IPv6(或反之)的端口轉發。

socat ipv4 到 ipv6 端口轉發工具

socat是一個非常強大的多功能命令列工具,它能夠建立幾乎任何類型的連接,包括資料轉送、端口轉發、管道、套接字轉換等。socat可以用於實現IPv4 到IPv6(或反之)的端口轉發,但要注意,它並不會直接實作NAT64 類型的網路位址轉換。

以下是使用socat來實現簡單的IPv4 到IPv6 端口轉發的範例:

安裝

基本指令格式

socat的基本指令格式為:

IPv4 到IPv6 端口轉發範例

假設你想要將本機IPv4 位址上的端口轉發到遠端IPv6 位址的端口。可以使用以下命令:

其中:

  • TCP4-LISTEN:<local-port>:監聽本地IPv4 位址上的指定端口。fork選項允許socat處理多個連線。
  • TCP6:[<ipv6-addr>]:<remote-port>:指定遠端的IPv6 位址和端口。

範例1

例如,如果你想要將本地的8080 端口轉送到IPv6 位址2001:0db8:85a3:0000:0000:8a2e:0370:7334的80 端口,你可以這樣做:

範例2

如果您需要同時使用socat進行TCP 和UDP 的端口轉發,您將需要執行兩個單獨的socat命令,因為每個socat實例只能處理一種類型的協定。假設您想要將本機的TCP 和UDP 端口8080 都轉送到IPv6 位址2001:0db8:85a3:0000:0000:8a2e:0370:7334上的端口80,您可以使用以下兩個指令:

TCP 轉發

UDP 轉發

注意事項

  • 確保socat安裝在你的系統上。可透過套件管理器(如aptyum)安裝。
  • socat的使用可能需要一定的網路知識,特別是在理解網路位址和端口的映射方面。
  • 確保任何防火牆或安全策略允許這種類型的連線。

socat是一個非常靈活的工具,可以用於各種複雜的網路操作。根據你的具體需求,你可能需要調整指令參數來適應你的環境。


進階篇1:

使用Systemd 服務

如果你的系統使用systemd作為其初始化系統和服務管理器,你可以建立一個systemd服務檔案來管理socat

  1. 建立Systemd 服務檔案: 例如,在/etc/systemd/system/socat.service中建立以下內容:

啟動和停止服務

  • 啟動服務:sudo systemctl start socat.service
  • 停止服務:sudo systemctl stop socat.service

進階篇2:

使用腳本和後台進程

  1. 建立一個控制腳本: 可以寫一個腳本來啟動和停止socat。這個腳本可以儲存socat進程的PID 到一個檔案中,然後使用這個PID 來停止進程。例如,建立一個名為socat_control.sh的腳本,內容如下:

  1. 使腳本可執行: 透過執行以下命令使腳本可執行:

  1. 使用腳本
  • 要啟動socat,運行:./socat_control.sh start
  • 要停止socat,運行:./socat_control.sh stop

進階篇3:

創建腳本來同時進行 TCP 和 UDP 的端口轉發

創建包裝腳本

  1. 創建一個新腳本:

  1. 在腳本中添加內容:

  1. 使腳本可執行:

創建 systemd 服務文件

  1. 創建服務文件:

  1. 添加以下內容:

管理服務

啟動:sudo systemctl start socat_combined.service
暫停:sudo systemctl stop socat_combined.service
設置開機自啟:sudo systemctl enable socat_combined.service
檢查狀態:sudo systemctl status socat_combined.service