使用 proxy_bind 时,nginx 流文件用于连接上游服务

使用 proxy_bind 时,nginx 流文件用于连接上游服务

我正在尝试使用 nginx 作为端口 443 上的 OpenVPN 的 TCP 代理。nginx 会将与 openvpn 的连接转发到端口 1194。

我可以配置它来与 openvpn 配合使用,而无需proxy_bind $remote_addr:$remote_port transparent;设置工作正常。但 openvpn 不会获取原始客户端的 IP 地址。这就是我尝试使用的原因proxy_bind

注意:有些人可能认为我只需将 openvpn 指向端口 443 即可,我的回答是,我也在 nginx 上运行 SSL HTTP 服务器,我个人认为使用port-shareopenvpn 提供的功能会比这样做带来更多的性能问题,而且端口共享不提供任何X-Forwarded-Host功能

网络限制:从网络到 VPN 服务器的连接只能在 443/TCP 上进行,这与当前的 HTTPS 设置冲突。因此使用 nginx 接收 TCP 连接并将其传递给 openVPN。

nginx:nginx/1.13.1
操作系统:Ubuntu 16.04

nginx 错误简单地说

2017/06/10 16:00:55 [error] 2777#2777: *288 connect() failed (110: Connection timed out) while connecting to upstream, client: <REAL-CLIENT-IP>, server: <SERV-IP>:443, upstream: "127.0.0.1:1194", bytes from/to client:0/0, bytes from/to upstream:0/0

下面的配置位于nginx.conf
顶层。

stream {
    upstream vpn_tcp {
        server localhost:1194;
    } 

    server { 
        listen <REAL-CLIENT-IP>:443 so_keepalive=on;
        proxy_connect_timeout 300s;
        proxy_timeout 300s;

        # If I commented out the below line, nginx would pass on TCP connections to the service with no problem except IP address that OpenVPN sees would be the server's IP not the Client
         proxy_bind $remote_addr:$remote_port transparent;
        #real_ip_header $realip_remote_addr:$realip_remote_port;
        #proxy_bind $remote_addr transparent;
        #proxy_bind $remote_addr;

        proxy_pass vpn_tcp;
    }
}

相关内容