在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 TCP/UDP代理简述
- 使用Nginx进行TCP/UDP端口转发
- nginx upstream 配置和作用
- Nginx基于TCP/UDP端口的四层负载均衡(Stream模块)配置梳理
- Nginx的 UDP 负载均衡
- Udp的反向代理:nginx