全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 8054|回复: 15

共用443解决方案(非proxy_protocol,web和trojan都可以拿到真实ip)

[复制链接]
发表于 2021-5-3 21:18:33 来自手机 | 显示全部楼层 |阅读模式
nginx作为tcp7层代理的时候并不是直接转发流量而是建立一个新的连接,而某些软件对7层的协议支持并不完整比如proxy_protocol 协议,导致显示的IP来源都是127.0.0.1或者干脆不能正常工作。所以我们现在要支持tcp 4层转发,让数据包直接去到后端。

我们可以在百度里看到各种文章,里面大部分都是在

1
2
3
stream {
    server {
       proxy_protocol on;#在这里加上这个配置
但是这个配置我觉得不是特别友好,特别是对于不支持7层的后端来说,你的来源全部都是127.0.0.1,很多分析无法进行。所以我们要用下面这个配置

1
2
user root;#原来这里是www-data或者nginx的
worker_processes auto;
1
2
3
4
5
stream {
    server {
        listen 443;
        listen [::]:443;
        proxy_bind $remote_addr transparent; #加上这条
现在我们要创建IP透明代理路由。并且代理和后端要跑在一同台服务器上。

如果你能看到这篇文章的话估计你已经找了很多类似文章了。通常文档都是介绍代理和后端不是在同一台服务器上的。

系统一般不允许将具有非本地源的数据包发送到环回地址,除非启用了route_localnet,如果具有环回地址的伪造数据包可能到达公共接口,这会产生安全问题。

但是这个限制仅适用于127/8地址范围,我们可以为环回接口分配别的的地址。从而绕过这个限制

1
ip addr add 192.168.127.1/24 dev lo scope host
debian系也可以在/etc/network/interfaces里改成这样。RH系很久没操作了,就用上面这个凑活吧,你们自己找持久化方法。

1
2
3
4
5
6
7
auto lo lo:10
  iface lo inet loopback

iface lo:10 inet static
        address 192.168.127.40
        netmask 255.255.255.0
        network 192.168.127.0
这样,我们给回环地址分配一个192.168.127.40的地址和一个192.168.127.0/24的可达网段。

为了匹配返回数据包,我们需要查看OUTPUT链而不是PREROUTING链。

在不是同一主机的方案里,我们会用PREROUTING去匹配。就像别的教程里

1
2
3
4
5
6
iptables -t mangle -N DIVERT
iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
iptables -t mangle -A DIVERT -j MARK --set-mark 1
iptables -t mangle -A DIVERT -j ACCEPT
ip rule add fwmark 1 lookup 100
ip route add local 0.0.0.0/0 dev lo table 100
但是,由于我们的流量来自本地主机,并且可以通过源地址轻松识别,因此我们可以放弃整个iptables匹配和基于标记的路由规则,将其替换为基于源的简单路由规则。

1
2
ip rule add from 192.168.127.0/24 lookup 100
ip route add local 0.0.0.0/0 dev lo table 100
debian系可以用以下持久化方法

1
2
3
4
5
6
iface lo:10 inet static
        address 192.168.127.40
        netmask 255.255.255.0
        network 192.168.127.0
    up ip rule add from 192.168.127.0/24 lookup 100 #新增这两条1
    up ip route add local 0.0.0.0/0 dev lo table 100 #新增这两条2
然后可以nginx/trojan服务器行以连接到在此新地址范围上侦听的本地服务。
必须注意将环回接口用于透明代理连接,否则数据包将无法传递。 这是通过使用新的本地地址做为监听地址而不是*或者0.0.0.0来完成的。

nginx配置---stream部分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
stream {
    根据sni分流
    map $ssl_preread_server_name $backend_name {
        yourname.com  trojan;
        default      web;
    }

    # web
    upstream web {
        server 192.168.127.40:444;
    }
     
    # trojan
    upstream trojan {
        server 192.168.127.40:445;
    }
     

    server {
        listen 443;
        listen [::]:443;
        proxy_pass  $backend_name;
        proxy_bind $remote_addr transparent;#4层转发模式
        ssl_preread on;
    }
}
nginx-server虚拟服务器部分,也就是你正常网站的部分

1
2
3
4
5
6
server {
    listen 444 http2 ssl;
    listen 192.168.127.40:444 http2 ssl;
    listen [::]:444 http2 ssl;
    server_name balabalayourname.com;
}
某些不能完整支持7层协议的软件,也一定要指定监听192.168.127.40或者特定IP,你指定*或者0.0.0.0是不管用的。

END
手机只能发成这样了
排版过的可以看博客https://blog.memotz.com/?p=801
发表于 2021-5-3 21:20:43 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2021-5-3 21:22:29 | 显示全部楼层
你的账号不想要了吗
发表于 2021-5-3 21:24:29 | 显示全部楼层
大佬可以帮我转发一下我的 本地trojan么 我要上转发
发表于 2021-5-3 21:26:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2021-5-3 22:16:24 来自手机 | 显示全部楼层
hostloc@ 发表于 2021-5-3 21:26
不仅限于运维上下手,要进入代码实践。

我觉得这个用运维方法挺好的,如果你要给trojan代码里加上支持protocol的代码。说实话我没想过。但是我觉得这个方法也很不错。
发表于 2021-5-3 22:56:03 | 显示全部楼层
没太看懂回程的数据包怎么走的
需要向路由器这样维护一个路由表来处理回程的数据包?
 楼主| 发表于 2021-5-3 23:16:49 | 显示全部楼层
zylntxx 发表于 2021-5-3 22:56
没太看懂回程的数据包怎么走的
需要向路由器这样维护一个路由表来处理回程的数据包? ...

给回环接口分配个额外的ip,不是127/8的,然后这个ip指定走路由表100。
发表于 2021-5-3 23:24:07 | 显示全部楼层
cybmp3 发表于 2021-5-3 23:16
给回环接口分配个额外的ip,不是127/8的,然后这个ip指定走路由表100。

给你blog+1IP
如果对于局域网内不同主机,一台作为proxy,一台作为后端,有什么推荐实现方法吗
 楼主| 发表于 2021-5-3 23:44:29 | 显示全部楼层
本帖最后由 cybmp3 于 2021-5-3 23:46 编辑
zylntxx 发表于 2021-5-3 23:24
给你blog+1IP
如果对于局域网内不同主机,一台作为proxy,一台作为后端,有什么推荐实现方法吗 ...


那个看nginx官方文档就行。
https://www.nginx.com/blog/ip-transparency-direct-server-return-nginx-plus-transparent-proxy/

中文翻译版本我觉得比较好的
https://cloud.tencent.com/developer/article/1449427
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2024-4-23 22:13 , Processed in 0.061595 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表