BSD/OS X에서 한 포트에서 다른 포트로 모든 UDP 트래픽을 리디렉션하는 방법은 무엇입니까?

BSD/OS X에서 한 포트에서 다른 포트로 모든 UDP 트래픽을 리디렉션하는 방법은 무엇입니까?

실행 Mac OS X 10.9.5중이며 권한이 없는 UDP 포트 69를 가상 머신의 포트 69 boot2docker로 일시적으로 전달하려고 합니다 . boot2dockerVirtualbox는 권한 있는 포트 전달만 지원합니다.

나는 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 -anUDP가 얼마나 열려 있는지 표시되지 않습니다.

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

이것관련된 유일한 것내가 온라인에서 찾은 내용은 별로 도움이 되지 않았습니다.

Mac OS X의 한 포트에서 다른 포트로 UDP 트래픽을 "미러링"하는 좋은 방법은 무엇입니까?

답변1

나는 다음 단계를 시도했습니다.~해야 한다일하지만 정말아니요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유틸리티도 필요하지 않으며, 가장 중요하게는 작동한다는 점이 "더 쉽다"고 말합니다.

답변2

이것은 하나입니다MacOS 및 Linux용 대체 UDP 리디렉터;일반적인 소스/대상 외에도 소스/대상 인터페이스 지정과 화성인 삭제(알 수 없는 소스의 UDP 패킷)도 지원합니다.

다음과 같이 실행할 수 있습니다.

./udp-redirect \
    --listen-port 69 \
    --connect-address 192.168.59.101 --connect-port 69

면책 조항: 저는 작성자이며 현재 이 게시물에서 Wireguard 트래픽을 리디렉션하기 위해 이를 사용하고 있습니다.

관련 정보