我想解决以下问题:假设我有两台计算机,A和B.
机器A接收来自接口的所有IP数据包(我假设为“tun”接口“),将其发送到Java进程(可能会修改数据),然后使用UDP将其发送到机器B. ,再次提取内容并发送到界面。
例如,在机器A上,我会输入ping B
命令,然后ping请求将接收到Java进程(包括IP头),使用UDP发送到机器B,发送到接口,然后,它将通过同一个隧道发回回复。我不能只使用socat
,因为我想对Java进程中的数据做一些事情。
我尝试的是(假设在机器A上):
socat -u tun:123.123.123.123/24,iff-up,iff-no-pi udp:localhost:1234 &
socat -u udp-listen:1236 interface:tun0 &
所有流量(例如ping请求)都发送到端口1234上的本地UDP套接字。我的Java进程从该端口接收,将其发送到机器B,并在机器上发送到本地端口1236.似乎tun0接口正确接收ping。问题是两台机器之间的数据包循环,可能是因为第二个socat
命令将数据包发送到tun0,然后第一个命令又将数据包发送回Java等。
您是否知道如何在没有此问题的情况下在UDP上通过Java隧道传输IP?