Xray指定出口IP用WARP的IPv4解锁流媒体

前言

通常我们用Cloudflare WARP通过替换VPS的双栈或单栈网络来通过获得所谓“原生IP”,从而解锁Netflex等流媒体,而如果直接替换掉双栈网络会导致VPS失联,即使通过修改路由表正常使用也会影响到Docker等应用的NAT。实际上我们只需要让Xray的流量走WARP接口出去就行了,outbounds配置提供了sendThrough用来指定出口IP,streamSettings.sockopt.mark用来设置fwmark。我之前直接指定为WARP的IP发现并不行,收不到回包(实际上如果直接指定接口名就正常使用了,可惜不支持)。在翻Xray的文档时才发现还需要配置一下路由表才行。

使用sendThrough

阅读更多

解决Docker下Golang程序在Alpine镜像中不读取hosts文件

今天用Docker部署gost的时候发现gost没有使用hosts文件中指定的ip,遂查阅了一番资料,得知是缺少了/etc/nsswitch.conf文件,解决方法如下:

1
echo "hosts: files dns" > /etc/nsswitch.conf

这条命令可以在运行时加入,也可以在构建镜像时加入,Dockerfile如下:

阅读更多

IPsec over GRE隧道简易配置教程

为了能够顺利根据这篇文章打通隧道,最好了解并满足如下前提:

  • 两台具有公网IP的VPS A和B,其中至少有一台拥有独立IP,并且另一台如果是NAT VPS则需要内外映射端口一致,假设A的公网IP为1.1.1.1,B的公网IP为2.2.2.2
  • 设定隧道A端内网IP为10.0.0.1,B端内网IP为10.0.0.2
  • A、B两台机器系统为Debian 10
  • 关闭防火墙

配置GRE隧道

阅读更多

shadowsocks+nginx+v2ray-plugin配置以及完善

由于shadowsocks缺乏伪装手段,而v2ray又过于臃肿庞大,便选择了一种折中的方式,shadowsocks+v2ray-plugin。为了方便,使用docker-compose来部署

docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
version: "3"
services:
nginx:
build: ./nginx
ports:
- 80:80
- 443:443
- 443:443/udp //映射udp端口
volumes:
- ./www:/home/wwwroot
- ./nginx/conf:/etc/nginx
- ./nginx/logs:/home/wwwlogs
restart: always
container_name: nginx
shadowsocks-libev:
build: ./shadowsocks-libev
volumes:
- ./shadowsocks-libev/config:/etc/shadowsocks-libev
restart: always
container_name: shadowsocks-libev
shadowsocks配置文件
1
2
3
4
5
6
7
8
9
10
11
12
{
"server": "0.0.0.0",
"mode": "tcp_and_udp",
"server_port": 10086,
"password": "password",
"method": "aes-256-gcm",
"fast_open": true,
"no_delay": true,
"timeout": 60,
"plugin": "v2ray-plugin",
"plugin_opts": "server;path=/ss"
}
阅读更多

为Docker中的Nginx启用Brotli压缩算法

由于Brotli属于第三方模块,Nginx的官方Docker镜像并没有集成,所以只能自己添加,好在Nginx可以动态加载模块,无需编译整个Nginx

直接上Dockerfile吧

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
ARG version=1.17.6

FROM nginx:${version}-alpine AS builder

ARG version

WORKDIR /root/

RUN apk update && apk add --no-cache build-base git pcre-dev openssl-dev zlib-dev \
&& wget http://nginx.org/download/nginx-${version}.tar.gz \
&& tar zxf nginx-${version}.tar.gz \
&& git clone https://github.com/google/ngx_brotli.git \
&& cd ngx_brotli \
&& git submodule update --init --recursive \
&& cd ../nginx-${version} \
&& ./configure \
--add-dynamic-module=../ngx_brotli \
--prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--modules-path=/usr/lib/nginx/modules \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--http-client-body-temp-path=/var/cache/nginx/client_temp \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp \
--with-perl_modules_path=/usr/lib/perl5/vendor_perl \
--user=nginx \
--group=nginx \
--with-compat \
--with-threads \
--with-http_addition_module \
--with-http_auth_request_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_mp4_module \
--with-http_random_index_module \
--with-http_realip_module \
--with-http_secure_link_module \
--with-http_slice_module \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_sub_module \
--with-http_v2_module \
--with-mail \
--with-mail_ssl_module \
--with-stream \
--with-stream_realip_module \
--with-stream_ssl_module \
--with-stream_ssl_preread_module \
&& make modules


FROM nginx:${version}-alpine

ARG version

ENV TIME_ZONE=Asia/Shanghai

RUN ln -snf /usr/share/zoneinfo/$TIME_ZONE /etc/localtime && echo $TIME_ZONE > /etc/timezone

COPY --from=builder /root/nginx-${version}/objs/ngx_http_brotli_filter_module.so /usr/lib/nginx/modules/
COPY --from=builder /root/nginx-${version}/objs/ngx_http_brotli_static_module.so /usr/lib/nginx/modules/
阅读更多