在openwrt 路由上使用 Geph ,如何配置透明代理?

透明代理:应该是需要翻墙的设备连接代理服务器,并不需要分别对设备上的软件或者系统级代理进行设置,就好像没有代理一样。

按照 Getting the latest Geph4 and usage / 最新二進制版下載 + 簡易使用教學
的教程,可以只使用 geph4-client 的代理模式,但是 如果运行 geph4-vpn-helper 会提示 未发现 geph4-vpn-helper
原因似乎是由于 openwrt /lib64/ 下只有 ld-musl-x86_64.so.1 而不是ld-linux-86-64.so.2 (是c库不同引起的?)
如果 vpn 模式不能使用,那么 geph 客户端 本身是 socks5或者https 代理客户端,那么需要将透明代理数据转换为socks5 协议。

后续

我后来选择用 openwrt 官方软件库里的 redsocks 作为透明代理软件 将tcp 转换 geph4-client 可以是别的socks5 协议

可以直接在 openwrt 终端中,通过以下命令安装:

opkg update
opkg install redsocks

接着,需要修改 /etc/redsocks.conf 文件
配置文件有几个部分

base  {
       XXXXX
}

这里不用修改(除非用在非linux 系统上)
而修改以下:

redsocks  {
          ......

          local_ip = 0.0.0.0;
          local_port = 12345;

          ......

          ip = 127.0.0.1;
          port = 9909;

          .......
          type = socks5;
}


redudp {
       .......
       local_ip = 0.0.0.0;
       local_port = 10053;
       
       .......
       
       ip = 127.0.0.1;
       port = 9909;

       ......

      dest_ip = 127.0.0.1;
      dest_port = 15353;
      
      udp_timeout = 30;
      udp_timeout_stream = 180;
}

注意:以上其他部分都是 用 “//” 注释掉

dnstc {
      local_ip = 127.0.0.1;
      local_port = 5300;
}

openwrt默认 redsocks 开机自启动,除了修改 redsocks 配置文件,还需要配合 iptables

# Create new chain
iptables -t nat -N REDSOCKS

iptables -t nat -A PREROUTING -i br-lan -p tcp -j REDSOCKS
iptables -t nat -A PREROUTING -i br-lan -p udp -j REDSOCKS

# Ignore LANs and some other reserved addresses.
# See http://en.wikipedia.org/wiki/Reserved_IP_addresses#Reserved_IPv4_addresses
# and http://tools.ietf.org/html/rfc5735 for full list of reserved networks.
iptables -t nat -A REDSOCKS -d 0.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 100.64.0.0/10 -j RETURN
iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 169.254.0.0/16 -j RETURN
iptables -t nat -A REDSOCKS -d 172.16.0.0/12 -j RETURN
iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN
iptables -t nat -A REDSOCKS -d 198.18.0.0/15 -j RETURN
iptables -t nat -A REDSOCKS -d 224.0.0.0/4 -j RETURN
iptables -t nat -A REDSOCKS -d 240.0.0.0/4 -j RETURN

# Anything else should be redirected to port 12345
iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports 12345
iptables -t nat -A REDSOCKS -p udp -j REDIRECT --to-ports 10053

以上是我抄来的,可能存在错误。
复制之后保存到一个 shell 脚本中,或者使用其他方法(因为iptables 规则会在重启之后恢复原状,所以要每次启动运行该 shell 脚本,也其他可持续性改变规则的方法)

运行脚本后,可以执行 geph4-client
请参考 Getting the latest Geph4 and usage / 最新二進制版下載 + 簡易使用教學

之后就应该可以使用了,但是通过验证,会发现一些问题,无法正常翻墙
原因是 dns 污染没有解决。那么该如何解决这个问题呢?

1 Like

如果redsocks已经成功了,可以考虑下dns over tcp,通过tcp模式查询dns。相关话题: dns-over-tcp · GitHub Topics · GitHub

感谢回复,我不了解该如何处理。但我做了一些尝试。
从论坛搜索信息来看 ,Geph 代理本身是能够理dns 请求的。
先尝试用 redsocks 本身功能 dnstc 和 dnsutp 我也不明白如何处理。
之后,我从 openwrt 官方软件库入手,找到一款软件 DNSCrypt-proxy2

看介绍 DNSCrypt 是可以解决 dns 投毒问题的,我就按照https://github.com/DNSCrypt/dnscrypt-proxy/wiki/Installation-on-OpenWrt
文档进行安装,并按推荐调整进行了设置

然后似乎 dns投毒 问题就解决了,但和我安装的 DNSCrypt-proxy2 有无直接关系并不清楚。
还是因为我杜绝使用路由网关的上游 dns 解析服务,所以自然可以解决这个问题?

1 Like

能解决就好呀!~

原因应该是你默认的dns为192.168.1.1,所以dns请求被上面ignore lan的规则给跳过没走geph4了。我手动把本地dns改为8.8.8.8即可上网。
想问一下你有没有研究出更好的iptables规则。我现在在看如何用ipset只转发gfwlist,这样geph4下线了还能访问国内网

1 Like

谢谢解答,另外我并不会iptables 设置,
还有就是:假设geph代理停止工作,但你此时却不清楚这一点,依然访问一些会被当局列入监测的ip地址。这也可能引发安全问题?