Nginx 配置端口转发

May 30, 2024 • 预计阅读时间 1 分钟

问题场景

C 是一台有公网 IP 的跳板机,A 和 B 是异地局域网的机器,并且 A、B、C 通过 WireGuard 组成了 VPN 局域网。

S 和 A 在同一个局域网内,并且 S 上运行了一个 Web 服务器,现在需要从 B 的位置访问到 S 的服务。

解决方案

在 A 上面使用 Nginx 进行端口转发,访问 A 的端口就相当于访问到 S 的服务端口,这样 B 只需要访问 A 开放的端口就可以了, 也不需要对外暴露 S 的 IP 地址。

配置 Nginx

假设 S 的内网地址和 Web 服务端口是 192.168.0.99:443,A 机器上使用端口 8443 进行数据转发:

在 A 机器上的 Nginx 配置端口转发:

stream {
    proxy_buffer_size 16k;

    server {
        listen 8443;
        proxy_connect_timeout 5s;
        proxy_timeout 15s;
        proxy_pass 192.168.0.99:443;
    }
}

当然 UDP 端口也可以转发,只需要在 listen 的端口后面加上 udp 就表示是转发 UDP 协议:

stream {
    proxy_buffer_size 16k;
    
    server {
        listen 53 udp reuseport;
        proxy_connect_timeout 5s;
        proxy_timeout 15s;
        proxy_pass 192.168.0.99:53;
    }
}

以上配置就可以把 DNS 解析通过端口转发到 192.168.0.99 上进行解析,对于异地网络访问很有用。

参考资料

https://nginx.org/en/docs/stream/ngx_stream_proxy_module.html

nginx
版权声明:如果转发请带上本文链接和注明来源。

lvv.me

iOS/macOS Developer

使用 ping 命令确定最佳 MTU 大小

为 sudo 命令设置不一样的 $PATH