通过 Nginx 转发 TCP 和 UDP 流量

Johnny 有的时候需要转发某些 TCP 端口,例如把内网的一台服务器映射到外网,比如远程桌面,或者因为各种原因,希望给那些不具备访问限制功能的网络服务软件增加网络访问限制功能。同学们都知道,可以通过防火墙达成这个目标,但是,我们常用的 Nginx 服务器软件,从 1.9.0 开始也增加了这个功能,同学们不妨可以试试看哟!
这里,用到的是 Nginx 的 Stream,也就是“流”转发功能,是比应用层更下层的协议,所有的数据包都被 Nginx 视为 Stream,这样,Nginx 就可以转发一切 TCP 及 UDP 数据包啦!
为什么 Johnny 会想要使用 Nginx 而非其它软件呢?因为,Johnny 的服务器上安装的只有 Nginx 服务端软件,另外安装其它端口转发软件不仅会耗费更多系统资源,还容易带来安全隐患,这里是设定参数值:
这是需要修改配置文件才能达成的噢!所以呀,得首先找到 Nginx 配置文件的位置呢!因为 Johnny 非常懒,所以就直接用官方编译 CentOS 7 版本 Nginx 的参数自己编译了一份,主要是 Johnny 想要增加流量统计模块,否则,嘿嘿,那才懒得自己编译呢!所以呀,配置文件就会位于 /etc/nginx 文件夹噢,我们首先得修改一下主配置文件,也就是 nginx.conf,在末尾呀,添加这么几行,来吧!

———- 我是超级无敌的分隔线! ———-
stream {
include conf.d/stream.ichenyao;
}

———- 我是超级无敌的分隔线! ———-

同学们注意噢,最末尾的右大刮胡的下面,也就是配置文件的末尾,一定要留下一行空行,不然可能会出错的噢!这里,stream 就是告诉 nginx 这是“流”配置节点啦,为了保持 nginx.conf 的美观,我们引用 conf.d/stream.ichenyao 这个文件,引用的意思就是,让 nginx 世纪载入配置文件的时候,在这一行顺便载入 conf.d/stream.ichenyao 这个配置文件啦,这个 stream.ichenyao 是自恋的小 Johnny 给起名的,名称可以随便设定,但是只应该有小写的英文字母和小数点。另外呢,你要把 include 换成设定值也是没问题的,只是 nginx.conf 会变成超级大胖子。
好了,我们进入 conf.d 文件夹,创建 stream.ichenyao 文件,里面这样子写:

———- 我是超级无敌的分隔线! ———-
server {
listen 15063;
proxy_pass 100.64.0.1:14393;
proxy_buffer_size 512k;
allow 192.168.1.0/24;
deny all;
}

server {
listen 53 udp;
proxy_pass 8.8.8.8:53;
proxy_buffer_size 512k;
allow 192.168.1.168;
deny all;
}

———- 我是超级无敌的分隔线! ———-
这里,同学们也要记得在末尾刘毅行空行,免得出错呢!其中:
server 表示这是一个节点;
listen 表示监听的 IP 地址和端口,如果你要转发 udp 协议,后面只要写 udp,Nginx 就知道你要转发 UDP 协议的数据包啦!
proxy_pass 是将要被代理的 IP 地址或主机名称,后面也要包括端口号呢!
proxy_buffer_size,这是缓冲区大小,如果服务器跑的是 64 位的系统,那么缓冲区大小就要设定为 8 的倍数噢!32 位系统是 4 的倍数就可以啦!
allow 是允许哪些网络进行连接,可以使用标准的 IP 地址,也可以用网络地址/掩码来表示,比如,192.168.0.0/255.255.255.0 就应该写成 192.168.0.0/24,对于没接触过网络设定的同学,在设定这个参数的时候可能会有困难,如果需要,Johnny 小朋友就会把工具上传到网站,哈哈。
deny 是拒绝连接,比如写 all,那就变成白名单模式啦!
最后的最后,一定要记得在末尾留下一个大刮胡用来收尾,毕竟有始有终吗!
好了,你可以运行这个指令,检查一下设定有没有错误:
nginx -t
运行后,输出应该是这样子滴:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
哈哈,我成功啦!哦对了,如果同学们想要更深入地学习这个 stream 模块的使用方法,不妨到官方网站进行学习噢!顺带还可以锻炼你的英语阅读能力呢!网址在这儿:传送门:https://nginx.org/en/docs/stream/ngx_stream_core_module.html

加入对话

2条评论

    1. 我没有找到 Nginx Stream 的统计模块,抱歉。

留下评论

您的电子邮箱地址不会被公开。 必填项已用*标注