阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

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

257次阅读
没有评论

共计 1307 个字符,预计需要花费 4 分钟才能阅读完成。




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

此文部分内容参考了:

其它 nginx 相关文章

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-22发表,共计1307字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中