socat ipv4 到 ipv6 端口轉發工具

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

socat ipv4 到 ipv6 端口轉發工具

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

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

安裝

apt install socat

基本指令格式

socat的基本指令格式為:

socat [options] <address1> <address2>

IPv4 到IPv6 端口轉發範例

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

socat TCP4-LISTEN:<local-port>,fork TCP6:[<ipv6-addr>]:<remote-port>

其中:

  • 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 端口,你可以這樣做:

socat TCP4-LISTEN:8080,fork TCP6:[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 轉發

socat TCP4-LISTEN:8080,fork TCP6:[2001:0db8:85a3:0000:0000:8a2e:0370:7334]:80

UDP 轉發

socat UDP4-LISTEN:8080,fork UDP6:[2001:0db8:85a3:0000:0000:8a2e:0370:7334]:80

注意事項

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

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


進階篇1:

使用Systemd 服務

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

  1. 建立Systemd 服務檔案: 例如,在/etc/systemd/system/socat.service中建立以下內容:
[Unit]
Description=Socat Service

[Service]
ExecStart=/usr/bin/socat TCP4-LISTEN:8080,fork TCP6:[2001:db8:85a3::8a2e:370:7334]:80
Restart=on-failure

[Install]
WantedBy=multi-user.target

啟動和停止服務

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

進階篇2:

使用腳本和後台進程

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

PIDFILE="/tmp/socat.pid"

start() {
    socat TCP4-LISTEN:8080,fork TCP6:[2001:0db8:85a3:0000:0000:8a2e:0370:7334]:80 &
    echo $! > "$PIDFILE"
}

stop() {
    if [ -f "$PIDFILE" ]; then
        kill $(cat "$PIDFILE")
        rm -f "$PIDFILE"
    else
        echo "Socat is not running."
    fi
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    *)
        echo "Usage: $0 {start|stop}"
        exit 1
esac
  1. 使腳本可執行: 透過執行以下命令使腳本可執行:
chmod +x socat_control.sh
  1. 使用腳本
  • 要啟動socat,運行:./socat_control.sh start
  • 要停止socat,運行:./socat_control.sh stop

進階篇3:

創建腳本來同時進行 TCPUDP 的端口轉發

創建包裝腳本

  1. 創建一個新腳本:
sudo nano /usr/local/bin/socat_wrapper.sh
  1. 在腳本中添加內容:
#!/bin/bash
/usr/bin/socat TCP4-LISTEN:您的本地TCP端口,fork TCP6:[您的IPv6地址]:您的远程TCP端口 &
/usr/bin/socat UDP4-LISTEN:您的本地UDP端口,fork UDP6:[您的IPv6地址]:您的远程UDP端口 &
wait
  1. 使腳本可執行:
sudo chmod +x /usr/local/bin/socat_wrapper.sh

創建 systemd 服務文件

  1. 創建服務文件:
sudo nano /etc/systemd/system/socat_combined.service
  1. 添加以下內容:
[Unit]
Description=Socat Combined Port Forwarding Service

[Service]
ExecStart=/usr/local/bin/socat_wrapper.sh
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target

管理服務

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


媒體平臺 Media Platform

追隨我的網站 https://catcatarb.com
追隨我的Medium https://medium.com/@arbcutecat
追隨我的Facebook https://facebook.com/arb.cutecat