deepseek轻松解决 Nginx 网络透传问题实现内部IBM MQ和外部IBM MQ的通信

发布于:2025-06-01 ⋅ 阅读:(23) ⋅ 点赞:(0)

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 {
#        }
#    }

}

配置说明

  1. 内网访问 → 外部机器:

    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

  2. 外部访问 → 内网服务器:

    nginx

    复制

    下载

    server {
        listen 36.*.*.218:1414;  # 监听Nginx的公网IP
        proxy_pass 10.11.13.26:1414;  # 转发到内网服务器
    }
    • 当外部客户端访问 36.*.*.218:1414 

    • Nginx 将流量透明转发到 10.11.13.26:1414

部署步骤

  1. 安装 stream 模块(如果尚未安装):

    bash

    复制

    下载

    sudo dnf install nginx-mod-stream
  2. 验证配置

    bash

    复制

    下载

    sudo nginx -t
  3. 重启 Nginx

    bash

    复制

    下载

    sudo systemctl restart nginx
  4. 检查端口监听

    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))
  5. 配置防火墙

    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]

测试方法

  1. 测试内网到外网透传(在内网任意机器执行):

    bash

    复制

    下载

    telnet 10.11.13.60 1414
    # 检查外部机器192.168.2.15是否收到连接
  2. 测试外网到内网透传(在外部网络执行):

    bash

    复制

    下载

    telnet 36.*.*.218 1414
    # 检查内网服务器10.11.13.26是否收到连接

安全加固建议

  1. 限制内网访问范围

    nginx

    复制

    下载

    server {
        listen 10.11.13.60:1414;
        allow 10.11.13.0/24;  # 只允许内网网段
        deny all;             # 拒绝其他所有
        proxy_pass 192.168.2.15:1414;
        # ...
    }
  2. 限制外部访问源IP(如果可能):

    nginx

    复制

    下载

    server {
        listen 36.*.*.218:1414;
        allow 192.168.2.15;   # 只允许外部机器IP
        deny all;             # 拒绝其他所有
        proxy_pass 10.11.13.26:1414;
        # ...
    }
  3. 启用连接限制

    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 端口透传需求。


 


 


 


网站公告

今日签到

点亮在社区的每一天
去签到