diff --git a/Dockerfile b/Dockerfile index 0d94f61..b78be4a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -45,7 +45,7 @@ COPY --from=xproxy /tmp/xproxy /asset/usr/bin/ COPY --from=proxy /tmp/*ray /asset/usr/bin/ FROM alpine:3.16 -RUN apk add --no-cache iptables ip6tables radvd +RUN apk add --no-cache iptables ip6tables radvd && mkdir -p /run/radvd/ COPY --from=asset /asset/ / WORKDIR /xproxy ENTRYPOINT ["xproxy"] diff --git a/README.md b/README.md index 5a09981..a199cf0 100644 --- a/README.md +++ b/README.md @@ -18,8 +18,14 @@ XProxy部署在内网Linux主机上,通过 `macvlan` 网络创建独立MAC地址的虚拟网关,捕获内网设备的网络流量,对其进行透明代理;宿主机一般以单臂旁路由的方式接入,虚拟网关运行时不会干扰宿主机网络,且宿主机系统的流量也可被网关代理。 +
+ +Examples + ![network](./docs/img/network-model.png) +
+ XProxy运行以后,内网流量将被收集到代理内核上,目前内置了 `xray` ,`v2ray` ,`sagray` 三种内核,支持 `Shadowsocks` ,`ShadowsocksR` ,`VMess` ,`VLESS` ,`Trojan` ,`WireGuard` ,`SSH` ,`PingTunnel` 等多种代理协议,支持 `XTLS` ,`WebSocket` ,`QUIC` ,`gRPC` 等多种传输方式。同时,得益于V2ray的路由设计基础,代理的网络流量可被精确地分流,可以依据内网设备、目标地址、访问端口、连接域名、流量类型等多种方式进行路由。 ## 配置格式 @@ -237,7 +243,7 @@ radvd: + `dnssl` :DNS搜寻域名,`suffix` 指定DNS解析的搜寻后缀列表,`option` 即 `DNSSL SPECIFIC OPTIONS` 章节列出的选项 - + > `rdnss` 与 `dnssl` 在[RFC6106](https://www.rfc-editor.org/rfc/rfc6106)中定义,将DNS配置信息直接放置在RA报文中发送,使用 `SLAAC` 时无需 `DHCPv6` 即可获取DNS服务器,但是旧版本Windows与Android等不支持该功能。 + + > `RDNSS` 与 `DNSSL` 在[RFC6106](https://www.rfc-editor.org/rfc/rfc6106)中定义,将DNS配置信息直接放置在RA报文中发送,使用 `SLAAC` 时无需 `DHCPv6` 即可获取DNS服务器,但是旧版本Windows与Android等不支持该功能。 ## 部署流程 @@ -403,28 +409,32 @@ shell> /etc/init.d/networking restart ### 5. 局域网设备访问 -配置完成后,容器IP为虚拟旁路由网关地址,设备网关设置为该地址即可正常上网。 +> 对于手动配置了静态IP的设备,需要修改网关地址为容器IP -对于非静态IP地址设备(常见情况)有以下情形: +配置完成后,容器IP即为虚拟旁路由网关地址,内网其他设备的网关设置为该地址即可被透明代理,因此需要修改DHCP配置与RADVD路由广播,让内网设备自动接入虚拟网关。 -+ 在IPv4上,修改路由器DHCP设置,将网关指向容器IP即可全局生效 +> 您可以监视 `log/access.log` 文件,设备正常接入后会在此显示连接日志 -+ 在IPv6上,容器默认会启动IPv6路由组播机制,内网设备将会无状态配置子网地址,网关地址自动指向容器链路本地地址,该配置可全局生效(需关闭路由器IPv6分配,避免冲突) ++ IPv4下,修改内网DHCP服务器配置(一般位于路由器上),将网关改为容器IP地址,保存后重新接入设备即可生效。 -对于静态IP地址设备(非常见情况)有以下情形: ++ IPv6下,你需要关闭路由或上级网络的RA广播功能,然后开启配置中的RADVD选项,如果需要使用DHCPv6,可调整配置中的M位与O位开启状态,保存后将设备重新接入网络即可。 -+ 在IPv4上,修改设备网关为容器IPv4地址 +## 演示实例 -+ 在IPv6上,修改设备地址至容器指定子网内,网关地址配置为容器IPv6地址(非链路本地地址) +实例1. [使用XProxy绕过校园网认证登录](./docs/example_1.md) -综上,开启虚拟网关前需关闭路由器IPv6地址分配,而后连入设备将自动适配IPv4与IPv6网络(绝大多数设备均以DHCP与IPv6路由器发现机制联网),对于此前在内网固定IP地址的设备,手动为其配置网关地址即可。 +实例2. [家庭网络的IPv4与IPv6透明代理](./docs/example_2.md) -## 演示实例 +## 开发相关 -实例1. 利用校园网53端口漏洞,使用XProxy搭建免费网络 ++ v4/v6路由表号,TProxy默认端口号 ... -实例2. 家庭网络IPv4与IPv6的透明代理 ++ 修改默认暴露文件夹 ... -## 开发相关 ++ 修改默认配置文件,开启debug模式 ... + ++ 容器自行编译 ## 许可证 + +MIT ©2022 [@dnomd343](https://github.com/dnomd343) diff --git a/cmd/xproxy.go b/cmd/xproxy.go index 6ea024c..66be71f 100644 --- a/cmd/xproxy.go +++ b/cmd/xproxy.go @@ -12,7 +12,7 @@ import ( ) var version = "0.9.3" -var v4RouteTable = 100 +var v4RouteTable = 104 var v6RouteTable = 106 var v4TProxyPort = 7288 var v6TProxyPort = 7289 diff --git a/docs/example_1.md b/docs/example_1.md new file mode 100644 index 0000000..c21580d --- /dev/null +++ b/docs/example_1.md @@ -0,0 +1 @@ +## 使用XProxy绕过校园网认证登录 diff --git a/docs/example_2.md b/docs/example_2.md new file mode 100644 index 0000000..f042f88 --- /dev/null +++ b/docs/example_2.md @@ -0,0 +1 @@ +## 家庭网络的IPv4与IPv6透明代理 \ No newline at end of file