Networking

如何在 BSD/OS X 上將所有 UDP 流量從一個埠重定向到另一個埠?

  • June 4, 2015

Mac OS X 10.9.5我正在執行boot2docker並想暫時將非特權 UDP 埠 69 轉發到boot2docker虛擬機的埠 69。Virtualbox 僅支持轉發特權埠。

我試過socat這樣執行:

socat UDP-LISTEN:69,fork,reuseaddr UDP:192.168.59.101:69

在我嘗試建立tftp連接然後它崩潰之前它工作得很好:

socat[32232] E bind(5, {LEN=16 AF=2 0.0.0.0:69}, 16): Address already in use

就 UDP 而言,檢查netstat -an並沒有顯示多少開放:

udp6       0      0  *.58669                *.*
udp4       0      0  *.58669                *.*

我在網上能找到的**唯一相關的東西**沒有多大幫助。

如何在 Mac OS X 上將 UDP 流量從一個埠“鏡像”到另一個埠的好方法是什麼?

我嘗試了以下步驟,這應該可以工作,但在 Mac 上不起作用(將埠 20 UDP 文本消息轉發到埠 29),但您可能還是想嘗試一下:

  1. cd /tmp
  2. mkfifo backpipe
  3. sudo nc -ulk 20 0<backpipe |sudo nc -ulk 29 | tee backpipe
  4. 在另一個終端上 - 用echo -n “this is a test” | sudo nc -4u -w1 localhost 20

可能是使用被破壞或fifo 特殊文件無法正常工作。

但是,我找到了一種“更簡單”的方法。

  1. 下載一個很小的c程序源文件,名為:udp_redirect(點擊這裡下載)
  2. 編譯它gcc -w udp_redirect.c -o udp_redirect
  3. 在後台執行它sudo ./udp_redirect 127.0.0.1 20 127.0.0.1 29 &
  4. 在 29 埠設置監聽器進行測試sudo nc -ul 29
  5. 在第二個終端上,使用echo “this is a test” | sudo nc -4u -w1 localhost 20

此測試將 UDP 文本消息發送到埠 20,並觀察第一個終端中埠 29 上的偵聽器列印消息。您還可以在埠 20 上設置偵聽器並查看沒有可用的消息,它們都被轉發(不重複)到埠 29。

我說它“更容易”,因為udp_redirect二進製文件更容易使用,不需要特殊的 fifo 文件,不需要管道,不需要nc實用程序,最重要的是,它可以工作!

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