실행 Mac OS X 10.9.5
중이며 권한이 없는 UDP 포트 69를 가상 머신의 포트 69 boot2docker
로 일시적으로 전달하려고 합니다 . boot2docker
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 리디렉터;일반적인 소스/대상 외에도 소스/대상 인터페이스 지정과 화성인 삭제(알 수 없는 소스의 UDP 패킷)도 지원합니다.
다음과 같이 실행할 수 있습니다.
./udp-redirect \
--listen-port 69 \
--connect-address 192.168.59.101 --connect-port 69
면책 조항: 저는 작성자이며 현재 이 게시물에서 Wireguard 트래픽을 리디렉션하기 위해 이를 사용하고 있습니다.