2025年5月30日
今天上午 客户突然打电话说还是要研究 Nginx 网络透传以解决IBM MQ和宝马IBM MQ的通信问题。本来这是一个备选方案,他们周一决定直接连接**IBM MQ的。
我是完全不懂的,上周二在无锡我问了一个以前很熟悉的***的老师,他告诉我可以实现。然后我就用deepseek开始了我的工作。
工作是出奇的顺利,deepseek给出了完全无误的方案。
我用华为云模拟了企业专线,很快就实现了公有云上的IBM MQ和私有数据中心的IBM MQ的数据通信。


理解了您的网络拓扑结构,我来重新配置 Nginx 的端口透传规则。Nginx 服务器有两个 IP:内网 IP 10.11.13.60 和公网 IP 36...218,需要连接的外部机器 IP 是 192.168.2.15。
修正后的 Nginx 配置(完整版)
nginx
复制
下载
# For more information on configuration, see:
# \* Official English Documentation: http://nginx.org/en/docs/
# \* Official Russian Documentation: http://nginx.org/ru/docs/
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
#加载stream模块
load_module /usr/lib64/nginx/modules/ngx_stream_module.so;
events {
worker_connections 1024;
}
# TCP/UDP透传配置
stream {
#配置1:内网访问 → 转发到外部机器
server {
listen 10.11.13.60:1414; #监听Nginx内网IP
proxy_pass 192.168.2.15:1414; #转发到外部机器
proxy_timeout 600s;
proxy_connect_timeout 5s;
proxy_buffer_size 16k;
}
#配置2:外部访问 → 转发到内网服务器
server {
listen 36.*.*.218:1414; #监听Nginx公网IP
proxy_pass 10.11.13.26:1414; #转发到内网服务器
proxy_timeout 600s;
proxy_connect_timeout 5s;
proxy_buffer_size 16k;
}
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
include /etc/nginx/conf.d/*.conf;
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
include /etc/nginx/default.d/*.conf;
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
# Settings for a TLS enabled server.
#
# server {
# listen 443 ssl http2 default_server;
# listen \[::\]:443 ssl http2 default_server;
# server_name _;
# root /usr/share/nginx/html;
#
# ssl_certificate "/etc/pki/nginx/server.crt";
# ssl_certificate_key "/etc/pki/nginx/private/server.key";
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 10m;
# ssl_ciphers PROFILE=SYSTEM;
# ssl_prefer_server_ciphers on;
#
# include /etc/nginx/default.d/\*.conf;
#
# location / {
# }
#
# error_page 404 /404.html;
# location = /40x.html {
# }
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
# }
}
配置说明
-
内网访问 → 外部机器 :
nginx
复制
下载
server { listen 10.11.13.60:1414; #监听Nginx的内网IP proxy_pass 192.168.2.15:1414; #转发到外部机器 }
-
当内网客户端访问 10.11.13.60:1414 时
-
Nginx 将流量透明转发到 192.168.2.15:1414
-
-
外部访问 → 内网服务器 :
nginx
复制
下载
server { listen 36.*.*.218:1414; #监听Nginx的公网IP proxy_pass 10.11.13.26:1414; #转发到内网服务器 }
-
当外部客户端访问 36...218:1414 时
-
Nginx 将流量透明转发到 10.11.13.26:1414
-
部署步骤
-
安装 stream 模块 (如果尚未安装):
bash
复制
下载
sudo dnf install nginx-mod-stream
-
验证配置 :
bash
复制
下载
sudo nginx -t
-
重启 Nginx :
bash
复制
下载
sudo systemctl restart nginx
-
检查端口监听 :
bash
复制
下载
sudo ss -tulnp | grep nginx
应该看到:
复制
下载
tcp LISTEN 0 4096 10.11.13.60:1414 *:* users:(("nginx",pid=xxx,fd=yy)) tcp LISTEN 0 4096 36.*.*.218:1414 *:* users:(("nginx",pid=xxx,fd=zz))
-
配置防火墙 :
bash
复制
下载
#开放内网端口 sudo firewall-cmd --permanent --zone=internal --add-port=1414/tcp #开放公网端口 sudo firewall-cmd --permanent --zone=public --add-port=1414/tcp sudo firewall-cmd --reload
网络拓扑说明
复制
下载
内网客户端 → [Nginx内网IP:10.11.13.60:1414] → 专线 → [外部机器:192.168.2.15:1414]
外部客户端 → [Nginx公网IP:36.*.*.218:1414] → Nginx → [内网服务器:10.11.13.26:1414]
测试方法
-
测试内网到外网透传 (在内网任意机器执行):
bash
复制
下载
telnet 10.11.13.60 1414 #检查外部机器192.168.2.15是否收到连接
-
测试外网到内网透传 (在外部网络执行):
bash
复制
下载
telnet 36.*.*.218 1414 #检查内网服务器10.11.13.26是否收到连接
安全加固建议
-
限制内网访问范围 :
nginx
复制
下载
server { listen 10.11.13.60:1414; allow 10.11.13.0/24; #只允许内网网段 deny all; #拒绝其他所有 proxy_pass 192.168.2.15:1414; # ... }
-
限制外部访问源 IP (如果可能):
nginx
复制
下载
server { listen 36.*.*.218:1414; allow 192.168.2.15; #只允许外部机器IP deny all; #拒绝其他所有 proxy_pass 10.11.13.26:1414; # ... }
-
启用连接限制 :
nginx
复制
下载
server { listen 36.*.*.218:1414; proxy_pass 10.11.13.26:1414; proxy_connect_timeout 10s; proxy_upload_rate 1m; #限制上传速度 proxy_download_rate 1m; #限制下载速度 }
这个配置准确地反映了您的网络拓扑,使用 Nginx 的两个不同 IP 地址分别处理内网和外网的 1414 端口透传需求。