nginx에서 포트 범위를 지정하는 UDP 프록시를 만드는 메모
5614 단어 portforwardnginxudp
배경
정보
UDP 통신의 역방향 프록시 서버 구축
htps : // 코 m / t 라 짱 / ms / 55975 에 37에 9 아 6b12 또는 71에
NGINX를 사용한 TCP/UDP Proxy 구축
htps : // / ch ぁ b. 시오 s. jp/아 r ゔぇ s/10313
nginx로 TCP로드 밸런서
htps : // 엔기네 에린 g. 메르카리. 이 m/bぉg/엔트리/2016-08-17-170114/
감사합니다.
낡은 nginx 라고 udp 에는 대응하고 있지 않는 + 포트 범위 지정할 수 없기 때문에 주의입니다!
최소한 v1.15.10이 필요합니다.
이번에는 1.19.10을 사용합니다.
프록시 기능을 사용하려면 소스에서 빌드해야했습니다.
(최근의 Ubuntu 패키지라든가 모듈(동적 로드)로 갈 수 있습니다만)
nginx 빌드
configure 에서, 낡은 힘든 autoconf configure 라고 생각했는데 자전 bash script 로 한층 더 어려운 (정말 그만두고 싶다)
--with-stream
로 컴파일합니다 (기본값과 정적 링크).pcre, zlib 관련은 필요하지 않으므로 off (
--with-stream=dynamic
)가 좋습니다.사용자 권한으로 이동
--without-***
에서 설정 파일의 폴더를 지정하십시오.mime.types 파일을 적절하게 복사하십시오.
$ nginx -p <path/to/conf>
로그를 stdout으로 내보내는 모드를 원하십니까?
-p
에서 conf 파일을 확인할 수 있습니다.stream 라든지로 지정하는 패스가 wildcard 지정의 경우, 파일 패스가 잘못되어도 에러 나오지 않기 때문에 주의입니다!
설정 예는 다음과 같습니다.
#user nginx;
worker_processes 1;
pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
sendfile on;
keepalive_timeout 65;
include /home/syoyo/local/nginx/conf.d/*.http.conf;
}
stream {
include /home/syoyo/local/nginx/conf.d/*.stream.conf;
# wildcard 使う場合, 存在しないパスでもエラー出さないので注意!
include /nonexit/syoyo/local/nginx/conf.d/*.stream.conf;
}
proxy.stream.conf
upstream backend {
server 10.8.0.6:8089;
}
server {
listen 8089 udp;
proxy_pass backend;
}
netcat, socat으로 통신 해보십시오.
# client(10.8.0.6)
$ socat UDP4-LISTEN:8089 stdout
# proxy(10.8.0.1)
$ nc -u 0.0.0.0 8089
hello
client 측에 hello 라고 표시되면 성공입니다!
그렇게하지 않으면 클라이언트와 프록시가 동일한 네트워크에 있고 Firewall (CentOS의 경우 기본 블록이므로 포트를 열어야합니다)에서 차단되어 있지 않은지 확인하십시오.
다중 포트 포워딩
v1.15.10부터 포트를 범위로 지정할 수 있습니다!
단,
-t
와 upstream
에서 모두 지정하는 것은 좋지 않습니다.upstream backend {
server 10.8.0.6:8089-8099;
}
server {
listen 8089-8099;
proxy_pass backend;
}
다음과 같이 인라인으로 작성 (
server
변수)하지 않으면 안됩니다.# OK
server {
listen 8089-8099;
proxy_pass 10.8.0.6:$server_port;
}
$server_port
에 변수를 지정할 수 있지만 nginx 문서가 끔찍하고 아무 것도 작성되지 않았기 때문에 포기했습니다.우선 인라인 디스플레이로 성공적으로 전달할 수 있기 때문에 좋습니다.
(로드 밸런스를 원할 때 소스 코드를 읽고 설정할 수 있는지 확인하십시오 )
TCP와 UDP는 각각 별도로 설정해야합니다.
server {
listen 8089-8099;
proxy_pass 10.8.0.6:$server_port;
}
server {
listen 8089-8099 udp;
proxy_pass 10.8.0.6:$server_port;
}
TODO
nginx, 우선 UDP forward 할 수 있는 것은 확인했습니다만, 설정 파일 포맷 독자이고 소스 코드는 러시아의 C 코드로 어려우므로 다른 툴에 한번도 빨리 환승하고 싶다. SOCKS5 proxy?
추가 높이에 대한 메모
그리고 벽 너머로. NAT/Firewall을 넘어 통신하자 - WebRTC 입문 2016
htps : // html5 에 x페르츠. jp/m가 고양이/20618/
gost - GO Simple Tunnel이 훌륭합니다.
htps : // 이 m / 톤가리 0 / ms / 84f630483 베 f19 아 2에 386
프록시와의 싸움에 지쳤으므로 go로 투명 프록시를 만들어 보았습니다.
htps : // 코 m / 와다 히로 / ms / 7 852b7217940 6 6 f26
Reference
이 문제에 관하여(nginx에서 포트 범위를 지정하는 UDP 프록시를 만드는 메모), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/syoyo/items/f91b92e3cd1457821e0b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)