透明网关搭建
v2搭建及测试
安装v2
- 官方一键脚本1
sudo bash <(curl -L -s https://install.direct/go.sh) - 下载脚本安装,其实与第1种方法一样
wget https://install.direct/go.sh
sudo chmod +x go.sh
sudo bash go.sh - 离线安装,在网络不佳或不合适的情况下使用本地安装在第2步中下载
go.sh
同时在v2ray-core-releases下载v2ray-linux-arm.zip
,如果树莓派中网络不佳可以在自己的PC机下载完之后迁移文件到树莓派中。
wget -O v2ray_install.sh https://install.direct/go.sh
chmod +x v2ray_install.sh
sudo ./v2ray_install.sh –local v2ray-linux-arm.zip
配置v2 - 后续操作默认切换到 root 权限下,填写v2的配置json。
sudo su root
cat > /etc/v2ray/config.json << EOF
{
“log”: {
“loglevel”: “warning”
},
“inbounds”: [
{
“tag”: “proxy”,
“port”: 1090, // 监听端口
“listen”: “127.0.0.1”,
“protocol”: “socks”, // 入口协议为 SOCKS 5
“sniffing”: {
“enabled”: true,
“destOverride”: [
“http”,
“tls”
]
},
“settings”: {
“auth”: “noauth”, //socks的认证设置,noauth 代表不认证,由于 socks 通常在客户端使用,所以这里不认证
“udp”: true
},
“streamSettings”: null
}
],
“outbounds”: [
{
“tag”: “proxy”,
“protocol”: “vmess”, // 出口协议
“settings”: {
“vnext”: [
{
“address”: “server.com”, // 服务器地址,请修改为你自己的服务器 IP 或域名
“port”: 10010, // 服务器端口
“users”: [
{
“id”: “b831381d-6324-4d53-ad4f-8cda48b30811”, // 用户 ID,必须与服务器端配置相同
“alterId”: 32 // 此处的值也应当与服务器相同
}
]
}
]
}
}
]
}
EOF
对上述配置中的protocol
以及vnext
下的address
、port
、id
、alterId
进行修改,这是必须修改的内容,其含义可参照注释,其他内容可不改变,如果懂得配置的话可以自行修改其余内容。 - 开启v2服务下面命令中以 # 开头为注释内容。
systemctl start v2ray
# 或使用 service v2ray start
ps -ef|grep v2ray
# 或使用 service v2ray status
正常情况下,v2已经开始运行,查看状态结果如下图。
全局代理及测试
- 配置全局代理编译安装
ProxyChains-NG
进行全局代理设置。
git clone https://github.com/rofl0r/proxychains-ng.git
cd /home/pi/proxychains-ng/
./configure && make && make install
# 设置及修改配置
cp ./src/proxychains.conf /etc/proxychains.conf
vim /etc/proxychains.conf
将proxychains.conf
配置文件的最后部分内容做以下修改:1
2
– socks4 127.0.0.1 9050
+ socks5 127.0.0.1 1090 - 测试v2通过 IP 以及 HTTP 响应码测试 v2 是否搭建成功。
# 返回未代理前的本地公网地址
curl ip.sb
# 返回代理过的v2服务器地址,表示搭建成功,若长时间无响应或返回非服务端 IP 地址的内容则表示搭建失败
proxychains4 curl ip.sb
# 返回 200 或 301 表示搭建成功,若返回 000 或长时间无反应则表示搭建失败
proxychains4 curl -so /dev/null -w “%{http_code}” google.com -x socks5://127.0.0.1:1090
透明网关搭建
V2配置透明代理的入站和DNS分流
将以下配置内容覆盖原先的v2配置内容,即修改 /etc/v2ray/config.json
下的内容。
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 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 | { “inbounds”: [ { “tag”:”transparent”, “port”: 12345, “protocol”: “dokodemo-door”, “settings”: { “network”: “tcp,udp”, “followRedirect”: true }, “sniffing”: { “enabled”: true, “destOverride”: [ “http”, “tls” ] }, “streamSettings”: { “sockopt”: { “tproxy”: “tproxy” // 透明代理使用 TPROXY 方式 } } }, { “port”: 1090, “protocol”: “socks”, // 入口协议为 SOCKS 5 “sniffing”: { “enabled”: true, “destOverride”: [“http”, “tls”] }, “settings”: { “auth”: “noauth” } } ], “outbounds”: [ { “tag”: “proxy”, “protocol”: “vmess”, // 代理服务器 “settings”: { “vnext”: [ { “address”: “server.com”, // 服务器地址,请修改为你自己的服务器 IP 或域名 “port”: 10010, // 服务器端口 “users”: [ { “id”: “b831381d-6324-4d53-ad4f-8cda48b30811”, // 用户 ID,必须与服务器端配置相同 “alterId”: 32 // 此处的值也应当与服务器相同 } ] }, “streamSettings”: { “sockopt”: { “mark”: 255 } }, “mux”: { “enabled”: true } }, { “tag”: “direct”, “protocol”: “freedom”, “settings”: { “domainStrategy”: “UseIP” }, “streamSettings”: { “sockopt”: { “mark”: 255 } } }, { “tag”: “block”, “protocol”: “blackhole”, “settings”: { “response”: { “type”: “http” } } }, { “tag”: “dns-out”, “protocol”: “dns”, “streamSettings”: { “sockopt”: { “mark”: 255 } } } ], “dns”: { “servers”: [ “8.8.8.8”, // 非中中国大陆域名使用 Google 的 DNS “1.1.1.1”, // 非中中国大陆域名使用 Cloudflare 的 DNS(备用) “114.114.114.114”, // 114 的 DNS (备用) { “address”: “223.5.5.5”, //中国大陆域名使用阿里的 DNS “port”: 53, “domains”: [ “geosite:cn”, “ntp.org”, // NTP 服务器 “$myserver.address” // 此处改为你 VPS 的域名 ] } ] }, “routing”: { “domainStrategy”: “IPOnDemand”, “rules”: [ { // 劫持 53 端口 UDP 流量,使用 V2Ray 的 DNS “type”: “field”, “inboundTag”: [ “transparent” ], “port”: 53, “network”: “udp”, “outboundTag”: “dns-out” }, { // 直连 123 端口 UDP 流量(NTP 协议) “type”: “field”, “inboundTag”: [ “transparent” ], “port”: 123, “network”: “udp”, “outboundTag”: “direct” }, { “type”: “field”, “ip”: [ // 设置 DNS 配置中的国内 DNS 服务器地址直连,以达到 DNS 分流目的 “223.5.5.5”, “114.114.114.114” ], “outboundTag”: “direct” }, { “type”: “field”, “ip”: [ // 设置 DNS 配置中的国内 DNS 服务器地址走代理,以达到 DNS 分流目的 “8.8.8.8”, “1.1.1.1” ], “outboundTag”: “proxy” // 改为你自己代理的出站 tag }, { // 广告拦截 “type”: “field”, “domain”: [ “geosite:category-ads-all” ], “outboundTag”: “block” }, { // BT 流量直连 “type”: “field”, “protocol”:[“bittorrent”], “outboundTag”: “direct” }, { // 直连中国大陆主流网站 ip 和 保留 ip “type”: “field”, “ip”: [ “geoip:private”, “geoip:cn” ], “outboundTag”: “direct” }, { // 直连中国大陆主流网站域名 “type”: “field”, “domain”: [ “geosite:cn” ], “outboundTag”: “direct” } ] } } |
同样的,对上述配置中的protocol
以及 vnext
下的 address
、 port
、 id
、 alterId
进行修改,这是必须修改的内容,其含义可参照注释,其他内容可不改变,如果懂得配置的话可以自行修改其余内容。
配置透明代理规则
本文使用方法是tproxy,同时保证树莓派和其他客户端均能实现科学上网。
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 | # 设置策略路由 ip rule add fwmark 1 table 100 ip route add local 0.0.0.0/0 dev lo table 100 # 代理局域网设备 iptables -t mangle -N V2RAY iptables -t mangle -A V2RAY -d 127.0.0.1/32 -j RETURN iptables -t mangle -A V2RAY -d 224.0.0.0/4 -j RETURN iptables -t mangle -A V2RAY -d 255.255.255.255/32 -j RETURN # 直连局域网,避免 V2Ray 无法启动时无法连网关的 SSH,如果你配置的是其他网段(如 10.x.x.x 等),则修改成自己的网段 iptables -t mangle -A V2RAY -d 192.168.0.0/16 -p tcp -j RETURN # 直连局域网,53 端口除外(因为要使用 V2Ray 的 DNS 解析) iptables -t mangle -A V2RAY -d 192.168.0.0/16 -p udp ! –dport 53 -j RETURN # 给 UDP 打标记 1,转发至 12345 端口 iptables -t mangle -A V2RAY -p udp -j TPROXY –on-port 12345 –tproxy-mark 1 # 给 TCP 打标记 1,转发至 12345 端口 iptables -t mangle -A V2RAY -p tcp -j TPROXY –on-port 12345 –tproxy-mark 1 # 应用规则 iptables -t mangle -A PREROUTING -j V2RAY # 代理网关本机 iptables -t mangle -N V2RAY_MASK iptables -t mangle -A V2RAY_MASK -d 224.0.0.0/4 -j RETURN iptables -t mangle -A V2RAY_MASK -d 255.255.255.255/32 -j RETURN # 直连局域网 iptables -t mangle -A V2RAY_MASK -d 192.168.0.0/16 -p tcp -j RETURN # 直连局域网,53 端口除外(因为要使用 V2Ray 的 DNS) iptables -t mangle -A V2RAY_MASK -d 192.168.0.0/16 -p udp ! –dport 53 -j RETURN # 直连 SO_MARK 为 0xff 的流量(0xff 是 16 进制数,数值上等同与上面V2Ray 配置的 255),此规则目的是避免代理本机(网关)流量出现回环问题 iptables -t mangle -A V2RAY_MASK -j RETURN -m mark –mark 0xff # 给 UDP 打标记,重路由 iptables -t mangle -A V2RAY_MASK -p udp -j MARK –set-mark 1 # 给 TCP 打标记,重路由 iptables -t mangle -A V2RAY_MASK -p tcp -j MARK –set-mark 1 # 应用规则 iptables -t mangle -A OUTPUT -j V2RAY_MASK |
设置开机服务自启
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | mkdir -p /etc/iptables && iptables-save > /etc/iptables/rules.v4 # /etc/systemd/system/ 目录下创建一个名为 tproxyrule.service 的文件,写入以下内容 [Unit] Description=Tproxy rule After=network.target Wants=network.target [Service] Type=oneshot #注意分号前后要有空格 ExecStart=/sbin/ip rule add fwmark 1 table 100 ; /sbin/ip route add local 0.0.0.0/0 dev lo table 100 ; /sbin/iptables-restore /etc/iptables/rules.v4 [Install] WantedBy=multi-user.target # 执行以下命令完成开机自启 systemctl enable tproxyrule |
注意事项
- 下载离线版v2时如果树莓派安装的是官方镜像系统则按照文中方法,如果自行安装了64位系统则需要下载
v2ray-linux-arm64.zip
; - v2的客户端代理端口有点区别,就是socks下和HTTP下是相差一个数的,具体可自行体会;
- 配置文件中需要注意树莓派所在网段以及本地代理地址。
结束
树莓派的使用还有许多可待拓展,本文只是介绍了目前最新的将树莓派作为透明网关的配置方法。
参考网址: