我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
检查netstat -an
并没有显示 UDP 有多少开放:
udp6 0 0 *.58669 *.*
udp4 0 0 *.58669 *.*
这唯一相关的事情我在网上找到的并没有太大帮助。
在 Mac OS X 上,将 UDP 流量从一个端口“镜像”到另一个端口的好方法是什么?
答案1
我尝试了以下步骤,应该工作,但确实不是在 Mac 上工作(将端口 20 UDP 文本消息转发到端口 29),但您可能想尝试一下:
cd /tmp
mkfifo backpipe
sudo nc -ulk 20 0<backpipe |sudo nc -ulk 29 | tee backpipe
- 在另一个终端上 - 测试它
echo -n “this is a test” | sudo nc -4u -w1 localhost 20
可能是用法被破坏或者 fifo 特殊文件无法工作。
然而,我找到了一种“更简单”的方法。
- 下载一个非常小的 c 程序源文件,名为:udp_redirect(点击此处下载)
- 编译它
gcc -w udp_redirect.c -o udp_redirect
- 在后台运行它
sudo ./udp_redirect 127.0.0.1 20 127.0.0.1 29 &
- 在29端口设置监听来测试
sudo nc -ul 29
- 在第二个终端上,使用以下命令进行测试
echo “this is a test” | sudo nc -4u -w1 localhost 20
此测试将 UDP 文本消息发送到端口 20,并观察第一个终端中端口 29 上的侦听器打印消息。您还可以在端口 20 上设置侦听器,然后查看没有可用消息,它们全部转发(不重复)到端口 29。
我说它“更容易”,因为udp_redirect
二进制文件的使用更容易,不需要特殊的 fifo 文件,不需要管道,不需要nc
实用程序,最重要的是,它可以工作!
答案2
这是一适用于 MacOS 和 Linux 的替代 UDP 重定向器;除了通常的源/目标之外,它还支持指定源/目标接口,以及丢弃 martians(来自未知来源的 UDP 数据包)。
您可以将其运行为:
./udp-redirect \
--listen-port 69 \
--connect-address 192.168.59.101 --connect-port 69
免责声明:我是作者,我现在在这篇文章中使用它来重定向 Wireguard 流量。