websockify는 이전에 wsproxy로 명명되었으며 noVNC 프로젝트의 일부였습니다.
가장 기본적인 수준에서 websockify는 WebSocket 트래픽을 일반 소켓 트래픽으로 변환합니다. Websockify는 WebSockets 핸드셰이크를 수락하고 이를 구문 분석한 다음 클라이언트와 대상 간의 트래픽을 양방향으로 전달하기 시작합니다.
주목할만한 커밋, 공지 사항 및 뉴스는 @noVNC에 게시됩니다.
websockify 개발자/통합자/사용자(또는 그렇게 되기를 원하는 경우)인 경우 noVNC/websockify 토론 그룹에 참여하십시오.
버그 및 기능 요청은 github 문제를 통해 제출할 수 있습니다.
websockify에 대한 감사를 표하고 싶다면 Compassion International, SIL, Habitat for Humanity, Electronic Frontier Foundation, Against Malaria Foundation, Nothing But Nets 등과 같은 훌륭한 비영리 단체에 기부할 수 있습니다. 기부할 경우 @noVNC를 트윗해 주세요. .
websockify 0.5.0부터 HyBi/IETF 6455 WebSocket 프로토콜만 지원됩니다. 이전 Base64 인코딩 데이터 형식은 지원되지 않습니다.
WebSocket 'wss://' URI 체계를 사용하여 트래픽을 암호화하려면 Websockify가 로드할 인증서와 키를 생성해야 합니다. 기본적으로 Websockify는 인증서 파일 이름 self.pem
로드하지만 --cert=CERT
및 --key=KEY
옵션은 파일 이름을 재정의할 수 있습니다. openssl을 사용하여 자체 서명된 인증서를 생성할 수 있습니다. 일반 이름을 묻는 메시지가 나타나면 프록시가 실행될 서버의 호스트 이름을 사용하십시오.
openssl req -new -x509 -days 365 -nodes -out self.pem -keyout self.pem
자체 서명된 인증서가 작동하려면 클라이언트/브라우저가 이를 이해하도록 해야 합니다. 승인된 인증서로 설치하거나 먼저 탐색하여 승인하는 HTTPS 연결에 동일한 인증서를 사용하여 이를 수행할 수 있습니다. 브라우저는 일반적으로 "신뢰 인증서?"를 제공하지 않습니다. 잘못된 인증서로 WSS 소켓을 열어 메시지를 표시하므로 두 가지 방법 중 하나로 이를 수락하도록 해야 합니다.
포트는 브라우저에 의해 연결을 구별하는 것으로 간주될 수 있습니다. 예를 들어 웹 사이트 URL이 https://my.local:8443이고 WebSocket URL이 wss://my.local:8001인 경우 먼저 https:/로 이동합니다. /my.local:8001, 예외를 추가한 다음 https://my.local:8443으로 이동하여 다른 예외를 추가합니다. 그런 다음 :8443을 통해 제공되는 HTML 페이지는 WSS를 :8001로 열 수 있습니다.
하나 이상의 중간 인증서가 포함된 상업용/유효한 SSL 인증서가 있는 경우 먼저 서버 인증서, CA의 중간 인증서 등을 하나의 파일로 연결합니다. --cert
옵션을 사용하여 이 파일을 지정한 다음 --key
사용하여 키에도 적용됩니다. 마지막으로 필요에 따라 --ssl-only
사용합니다.
기본 작동에는 필요하지 않습니다.
데몬화: -D
옵션이 지정되면 websockify는 백그라운드에서 데몬 프로세스로 실행됩니다.
SSL(wss:// WebSockets URI): 이는 클라이언트에서 보낸 첫 번째 바이트를 스니핑한 다음 데이터가 'x16' 또는 'x80'(SSL을 나타냄)으로 시작하는 경우 소켓을 래핑하여 websockify에 의해 자동으로 감지됩니다.
세션 녹화: --record
옵션을 사용하여 클라이언트와 주고받은 트래픽을 파일에 기록하는 기능입니다.
미니 웹 서버: websockify는 WebSocket 프록시와 동일한 포트에서 일반 웹 요청을 감지하고 응답할 수 있습니다. 이 기능은 --web DIR
옵션을 사용하여 활성화됩니다. 여기서 DIR은 제공할 웹 디렉터리의 루트입니다.
프로그램 래핑: 아래의 "프로그램 래핑" 섹션을 참조하세요.
로그 파일: websockify는 모든 로깅 정보를 파일에 저장할 수 있습니다. 이 기능은 --log-file FILE
옵션으로 활성화됩니다. 여기서 FILE은 로그가 저장되어야 하는 파일입니다.
인증 플러그인: websockify는 websocket 연결에 대한 인증을 요구할 수 있으며, --web-auth
사용하는 경우 일반 웹 요청에 대해서도 인증을 요구할 수 있습니다. 이 기능은 --auth-plugin CLASS
및 --auth-source ARG
옵션으로 활성화됩니다. 여기서 CLASS는 일반적으로 auth_plugins.py의 하나이고 ARG는 플러그인 구성입니다.
토큰 플러그인: websockify의 단일 인스턴스는 token
URL 매개변수를 사용하여 클라이언트가 보낸 토큰 또는 --host-token
사용하는 경우 websockify에 도달하는 데 사용되는 호스트 이름에 따라 클라이언트를 사전 구성된 여러 대상에 연결할 수 있습니다. 이 기능은 --token-plugin CLASS
및 --token-source ARG
옵션으로 활성화됩니다. 여기서 CLASS는 일반적으로 token_plugins.py의 하나이고 ARG는 플러그인 구성입니다.
websockify의 기본 구현은 Python입니다. 자매 저장소인 websockify-js(JavaScript/Node.js) 및 websockify-other(C, Clojure, Ruby)에는 다른 언어로 된 여러 대체 구현이 있습니다.
또한 websockify "프로토콜"을 구현하는 여러 다른 외부 프로젝트가 있습니다. 자세한 내용은 대체 구현 기능 매트릭스를 참조하세요.
소스 주소에서 대상 주소(다른 시스템에 있을 수 있음)로 프록시하는 것 외에도 websockify는 로컬 시스템에서 프로그램을 시작하고 WebSocket 트래픽을 프로그램이 소유/바인딩한 일반 TCP 포트로 프록시하는 기능을 가지고 있습니다.
이는 프로그램의 바인딩() 시스템 호출을 가로채는 LD_PRELOAD 라이브러리( rebind.so
)에 의해 수행됩니다. 지정된 포트가 새로운 localhost/loopback free high 포트로 이동됩니다. 그런 다음 websockify는 원래 포트로 전달되는 WebSockets 트래픽을 프로그램의 새(이동된) 포트로 프록시합니다.
프로그램 랩 모드는 대상을 --
다음에 랩할 프로그램 명령줄로 대체하여 호출됩니다.
`./run 2023 -- PROGRAM ARGS`
--wrap-mode
옵션은 래핑된 프로그램이 종료되거나 데몬화될 때 수행할 작업을 나타내는 데 사용할 수 있습니다.
다음은 noVNC와 함께 사용하기 위해 websockify를 사용하여 vncserver 명령(자체를 배경으로 설정)을 래핑하는 예입니다.
`./run 5901 --wrap-mode=ignore -- vncserver -geometry 1024x768 :1`
다음은 telnetd를 래핑하는 예입니다(krb5-telnetd에서). 연결이 닫힌 후 telnetd가 종료되므로 랩 모드가 명령을 다시 생성하도록 설정됩니다.
`sudo ./run 2023 --wrap-mode=respawn -- telnetd -debug 2023`
websockify-js 프로젝트의 wstelnet.html
페이지는 간단한 WebSocket 기반 텔넷 클라이언트를 보여줍니다(호스트와 포트에 각각 'localhost' 및 '2023' 사용).
릴리스 또는 최신 개발 버전 중 하나를 다운로드하고 압축을 푼 다음 파일을 추출한 디렉터리에서 루트로 python3 setup.py install
실행합니다. 일반적으로 아직 설치하지 않은 경우 더 나은 성능을 위해 numpy도 설치됩니다. 그러나 numpy는 선택 사항입니다. numpy를 설치하고 싶지 않거나 컴파일할 수 없는 경우 python3 setup.py install
실행하기 전에 setup.py를 편집하고 install_requires=['numpy'],
행을 제거할 수 있습니다.
그런 다음 경로에서 websockify를 사용할 수 있어야 합니다. websockify --help
실행하여 올바르게 설치되었는지 확인하세요.
Docker, Podman, Singularity, udocker 또는 OCI 컨테이너 이미지를 지원하는 선호하는 컨테이너 런타임을 사용하여 websockify를 실행할 수도 있습니다.
이미지의 진입점은 run
명령입니다.
이미지를 빌드하려면:
./docker/build.sh
일단 빌드되면 run
명령에 제공하고 포트 매핑 할당을 처리하는 것과 동일한 인수를 사용하여 시작할 수 있습니다.
docker run -it --rm -p <port>:<container_port> novnc/websockify <container_port> <run_arguments>
예를 들어 로컬 포트 7000에서 10.1.1.1:5902로 트래픽을 전달하려면 다음을 사용할 수 있습니다.
docker run -it --rm -p 7000:80 novnc/websockify 80 10.1.1.1:5902
예를 들어 --web
또는 --cert
옵션과 같이 파일을 포함해야 하는 경우 필요한 파일을 /data
볼륨에 마운트한 다음 일반적인 방법으로 참조할 수 있습니다.
docker run -it --rm -p 443:443 -v websockify-data:/data novnc/websockify --cert /data/self.pem --web /data/noVNC :443 --token-plugin TokenRedis --token-source myredis.local:6379 --ssl-only --ssl-version tlsv1_2