好好爱自己!

【转】使用Nginx进行TCP/UDP端口转发

 

原文: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做端口转发。

posted @ 2022-02-17 16:10  立志做一个好的程序员  阅读(6327)  评论(0编辑  收藏  举报

不断学习创作,与自己快乐相处