原文:https://www.xiaoz.me/archives/10578
https://www.cnblogs.com/paul8339/p/14688378.html
------------------------
Nginx (engine x) 是一個高性能的HTTP和反向代理服務器,也是一個IMAP/POP3/SMTP服務器。在1.9.13版本后,Nginx已經支持端口轉發。之前分享過《Linux安裝rinetd實現TCP端口轉發》,rinetd配置簡單,使用方便,但遺憾的是不支持UDP轉發。如果需要同時支持TCP/UDP端口轉發可以使用Nginx

安裝Nginx
可以自行去官方http://nginx.org/下載最新版本Nginx編譯安裝,注意版本一定要大於1.9.1,編譯的時候需要--with-stream這個模塊支持。
編譯方法這里就不介紹了,這篇文章直接使用xiaoz寫好的一鍵腳本安裝Nginx,省時、省力,直接執行下面的命令即可。
#執行下面的命令,根據提示完成安裝 wget https://raw.githubusercontent.com/helloxz/nginx-cdn/master/nginx.sh && bash nginx.sh #安裝完成后執行下面的命令讓環境變量生效 source /etc/profile #執行下面的命令查看nginx信息 nginx -V

端口轉發
在nginx.conf添加如下配置,並使用nginx -s reload重載nginx使其生效,同時注意防火牆/安全組放行對應的端口。
stream { #將12345端口轉發到192.168.1.23的3306端口 server { listen 12345; proxy_connect_timeout 5s; proxy_timeout 20s; proxy_pass 192.168.1.23:3306; } #將udp 53端口轉發到192.168.1.23 53端口 server { listen 53 udp reuseport; proxy_timeout 20s; proxy_pass 192.168.1.23:53; } #ipv4轉發到ipv6 server { listen 9135; proxy_connect_timeout 10s; proxy_timeout 30s; proxy_pass [2607:fcd0:107:3cc::1]:9135; } }
- listen:后面填寫源端口(也就是當前服務器端口),默認協議為TCP,可以指定為UDP協議
- proxy_connect_timeout:連接超時時間
- proxy_timeout:超時時間
- proxy_pass:填寫轉發目標的IP及端口號
注意:nginx可以將IPV4的數據包轉發到IPV6,IPV6的IP需要使用[]括起來。
總結
目前能實現端口轉發的工具大致有:rinetd、SSH、iptables、nginx、haproxy,其中rinetd配置最為簡單,但不支持UDP轉發,並且該軟件已經好幾年未更新,如果您服務器上已經安裝了nginx,不妨用nginx做端口轉發。
