2020年12月25日星期五

HAProxy 让 Trojan-gfw 和 V2Ray 共存

参考来源 

https://lhy.life/20200909-haproxy/


HAProxy 配置

global

        log /dev/log local0

        log /dev/log local1 notice

        chroot /var/lib/haproxy

        user haproxy

        group haproxy

        daemon


defaults

        log global

        mode tcp

        option tcplog

        option dontlognull

        timeout connect 24h

        timeout client 24h

        timeout server 24h


frontend ssl

        mode tcp

        bind *:443

        

        tcp-request inspect-delay 3s

        tcp-request content accept if { req.ssl_hello_type 1 }


        use_backend trojan if { req_ssl_sni -i trojan.exp.com }

        use_backend naiveproxy if { req_ssl_sni -i naive.exp.com }       

        use_backend v2ray if { req_ssl_sni -i v2ray.exp.com }

        use_backend web1 if { req_ssl_sni -i web1.exp.com }

        use_backend web2 if { req_ssl_sni -i web2.exp.com }


backend trojan

        mode tcp

        server trojan 127.0.0.1:350


backend naiveproxy

        mode tcp

        server naiveproxy 127.0.0.1:352


backend v2ray

        mode tcp

        server v2ray 127.0.0.1:353


backend web1

        mode tcp

        server web1 127.0.0.1:356


backend web2

        mode tcp

        server web2 127.0.0.1:357


Trojan 服务端配置

{

    "run_type": "server",

    "local_addr": "0.0.0.0",

    "local_port": 350,

    "remote_addr": "127.0.0.1",

    "remote_port": 351,

    "password": [

        "passwd1",

        "passwd2"

    ],

    "log_level": 1,

    "ssl": {

        "cert": "/path/cert.pem",

        "key": "/path/key.pem",

        "key_password": "",

        "cipher_tls13": "TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384",

        "prefer_server_cipher": true,

        "alpn": [

            "http/1.1"

        ],

        "alpn_port_override": {

            "h2": 81

        },

        "reuse_session": true,

        "session_ticket": false,

        "session_timeout": 600,

        "plain_http_response": "",

        "curves": "",

        "dhparam": ""

    },

    "tcp": {

        "prefer_ipv4": false,

        "no_delay": true,

        "keep_alive": true,

        "reuse_port": false,

        "fast_open": false,

        "fast_open_qlen": 20

    },

    "mysql": {

        "enabled": false,

        "server_addr": "127.0.0.1",

        "server_port": 3306,

        "database": "trojan",

        "username": "trojan",

        "password": "",

        "cafile": ""

    }

}


NaiveProxy 服务端 Caddy 配置

{

    "admin": {

          "disabled": true

    },

    "apps": {

       "http": {

         "servers": {

           "web1": {

             "listen": [":352"],

             "routes": [{

               "handle": [{

                 "handler": "forward_proxy",

                 "hide_ip": true,

                 "hide_via": true,

                 "auth_user": "你的账户",

                 "auth_pass": "你的密码",

                 "probe_resistance": {"domain": "your-secret-link.localhost"}

               }]

             }, {

               "match": [{"host": ["naive.exp.com"]}],

               "handle": [{

                 "handler": "file_server",

                 "root": "/path/naive.exp.com",

                 "index_names": ["index.html"]

               }],

               "terminal": true

             }],

             "tls_connection_policies": [{

               "match": {"sni": ["naive.exp.com"]}

             }],

             "automatic_https": {

               "disable": true

             }

           }

         }

       },

       "tls": {

         "certificates": {

           "load_files": [{

             "certificate": "/path/cert.pem",

             "key": "/path/key.pem"

           }]

         }

       }

    }

}


V2Ray 服务端配置

VLESS+TCP+TLS 和 VMess+WebSocket+TLS 配置


{

    "log": {

        "loglevel": "warning"

    },

    "inbounds": [

        {

            "port": 353,

            "protocol": "vless",

            "settings": {

                "clients": [

                    {

                        "id": "你的UUID",

                        "level": 0

                    }

                ],

                "decryption": "none",

                "fallbacks": [

                    {

                        "dest": 354

                    },

                    {

                        "path": "/yourpath",

                        "dest": 355

                    }

                ]

            },

            "streamSettings": {

                "network": "tcp",

                "security": "tls",

                "tlsSettings": {

                    "alpn": [

                        "http/1.1"

                    ],

                    "certificates": [

                        {

                            "certificateFile": "/path/to/fullchain.crt",

                            "keyFile": "/path/to/private.key"

                        }

                    ]

                }

            }

        },

        {

            "port": 355, 

            "listen": "127.0.0.1", 

            "protocol": "vmess", 

            "settings": {

                "clients": [

                    {

                        "id": "你的UUID", 

                        "level": 0,

                        "alterId": 4

                    }

                ]

            }, 

            "streamSettings": {

                "network": "ws", 

                "wsSettings": {

                    "path": "/yourpath 和上面一样"

                }

            }

        }

    ], 

    "outbounds": [

        {

            "protocol": "freedom"

        }

    ]

}


Nginx 配置

user root root

...

events {

    ...

}

http {

    ...


    ## Trojan 伪装站点配置

    server {

        listen 80;

        listen [::]:80;

        server_name trojan.exp.com;

        return 301 https://trojan.exp.com$request_uri;

    }

    server {

        listen 351;

        server_name trojan.exp.com;

        index index.php index.html;

        root /www/wwwroot/trojan.exp.com;

        ...

    }


    ## NaiveProxy 配置(只处理http重定向至https)

    server {

        listen 80;

        listen [::]:80;

        server_name naive.exp.com;

        return 301 https://naive.exp.com$request_uri;

    }


    ## VLESS 回落站点配置

    server {

        listen 80;

        listen [::]:80;

        server_name v2ray.exp.com;

        return 301 https://v2ray.exp.com$request_uri;

    }

    server {

        listen 354;

        server_name v2ray.exp.com;

        index index.php index.html;

        root /www/wwwroot/v2ray.exp.com;

        ...

    }


    ## web1 站点配置

    server {

        listen 80;

        listen [::]:80;

        server_name web1.exp.com;

        return 301 https://web1.exp.com$request_uri;

    }

    server {

        listen 356 ssl http2;

        server_name web1.exp.com;

        index index.php index.html;

        root /www/wwwroot/web1.exp.com;


        ssl_certificate /path/to/fullchain.crt;

        ssl_certificate_key /path/to/private.key;

        ...

    }


    ## web2 站点配置

    server {

        listen 80;

        listen [::]:80;

        server_name web2.exp.com;

        return 301 https://web2.exp.com$request_uri;

    }

    server {

        listen 357 ssl http2;

        server_name web2.exp.com;

        index index.php index.html;

        root /www/wwwroot/web2.exp.com;


        ssl_certificate /path/to/fullchain.crt;

        ssl_certificate_key /path/to/private.key;

        ...

    }

    ...

}


为 Nginx 启用 PROXY protocol

HAProxy 配置

...

backend web1

        mode tcp

        server web1 127.0.0.1:356 send-proxy


backend web2

        mode tcp

        server web2 127.0.0.1:357 send-proxy

...

Nginx 配置

...

http {

    ...

    ## web1 站点配置

    ...

    server {

        listen 356 ssl http2 proxy_protocol;

        server_name web1.exp.com;

        index index.php index.html;

        root /www/wwwroot/web1.exp.com;


        set_real_ip_from 127.0.0.1;

        real_ip_header proxy_protocol;


        ssl_certificate /path/to/fullchain.crt;

        ssl_certificate_key /path/to/private.key;

        ...

    }


    ## web2 站点配置

    ...

    server {

        listen 357 ssl http2 proxy_protocol;

        server_name web2.exp.com;

        index index.php index.html;

        root /www/wwwroot/web2.exp.com;


        set_real_ip_from 127.0.0.1;

        real_ip_header proxy_protocol;


        ssl_certificate /path/to/fullchain.crt;

        ssl_certificate_key /path/to/private.key;

        ...

    }

    ...

}








没有评论:

发表评论

caddy反代下载文件

# 监听端口 51110,提供静态文件服务和目录浏览 :51110 {     root * /home/tls     encode gzip  # 只启用 gzip 压缩     file_server {         browse     }     # 使用提供的证书...