ss-tproxy icon indicating copy to clipboard operation
ss-tproxy copied to clipboard

Will this tool support trans-proxy a network behind a openvpn?

Open wnpllrzodiac opened this issue 1 year ago • 8 comments

for example: I use OpenVPN app to connect my android device with a linux server at home.

android -> 4g/5g network ->(openvpn protocol) -> linux server(installed ss-tproxy) -> internet

run command curl some.blocked.com on linux server will be good.

My question is: Can android device access google.com via openvpn(I meant I want to use ss-tproxy as a proxy to access some network resources)

linux server ip addr is 192.168.1.5 (router is 192.168.1.1) and VPN gateway is 192.168.8.1 so my android device VPN ip addr is 192.168.8.5 (for example)

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether ff:7f:ff:69:ff:ff brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.5/24 brd 192.168.1.255 scope global dynamic noprefixroute eth0

6: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
    link/none
    inet 192.168.8.1 peer 192.168.8.2/32 scope global tun0

wnpllrzodiac avatar May 09 '24 15:05 wnpllrzodiac

你需要在android这边添加路由规则,将目标流量导向openvpn的虚拟网络接口(最终流量将前往openvpn服务器,即ss-tproxy所在主机)

你可能还需要设置android上的dns,将dns指向openvpn服务端的ip(192.168.8.1),避免dns污染等问题。

完成该步骤后,应该不需要做其他额外工作/配置,因为其原理与 常规局域网内使用ss-tproxy作为代理网关(局域网主机将网关和dns指向ss-tproxy主机) 是一样的。

zfl9 avatar May 09 '24 15:05 zfl9

我现在连接上 vpn server以后,可以访问192.168.1.x 网段的机器,以及百度。只是访问某些网站有问题,不能做到像 linux机器上访问自由 你的意思,在 android设备上访问网页的流量并没有进过 openvpn从serve访问,而是从手机端直接出外网?感觉和 vpn 设计思路不符合啊

wnpllrzodiac avatar May 10 '24 00:05 wnpllrzodiac

你这个现象应该是dns没设置好,被污染了,把dns指向ss-tproxy主机(vpn网卡的的那个ip,192.168.8.1)应该就OK了

zfl9 avatar May 10 '24 00:05 zfl9

vpn就是将多个位于不同网络的主机连起来,就像是真实的局域网那样连接起来,没什么特别之处。

说白了,一个主机连上vpn后,不过就是在这台主机上多了一个 网络接口(网卡)。该主机传出的流量要发往谁(哪个网络接口),都是通过路由规则决定的。

dns也是一样的,主机配置的dns是什么ip,就会根据路由规则,将其发往正确的目的地。在我们这里,ss-tproxy主机就是正确的目的地,因为它有防污染的dns服务(chinadns-ng)。


你要理解一个正常的网络访问是什么流程,才知道如何实现你的目的:

  • 通常都是通过域名访问目标网络服务,因此第一步就是DNS解析,因此主机的DNS设置很重要,如果需要避免污染(google等网站会被污染),必须使用ss-tproxy主机上的DNS服务,否则解析拿到的IP就是错误的。
  • DNS解析拿到IP之后,就是根据主机的路由规则,看IP数据包要从哪个网络接口发出去。如果你希望走ss-tproxy的代理,自然要想办法让这些IP包发往ss-tproxy主机,这样ss-tproxy这边才能处理它。
    • 要做的这一点,有个最简单的办法,就是在主机上配置默认路由,将默认路由(网关)指向ss-tproxy主机的IP(vpn接口的ip),这就是“常规局域网代理时”,局域网主机所做的事情(也即文档说的,如果局域网主机想走ss-tproxy的透明代理服务,就需要把“网关”和DNS指向ss-tproxy主机)。

zfl9 avatar May 10 '24 00:05 zfl9

你这个现象应该是dns没设置好,被污染了,把dns指向ss-tproxy主机(vpn网卡的的那个ip,192.168.8.1)应该就OK了

你的意思手机连上VPN以后, 用dig google.com 返回的是错误的ip,所以即使通过192.16.8.x 的网段出口访问网络也不行了? 4g 下,未连 vpn: ping google.com 46.82.174.69 4g+vpn: ping google.com 46.82.174.69
这个IP看起来是不对的,是个德国ip

wnpllrzodiac avatar May 10 '24 03:05 wnpllrzodiac

是的,你这个dns没有走ss-tproxy的chinadns-ng,所以解析拿到的ip不对

zfl9 avatar May 10 '24 05:05 zfl9

设置了下参数,dns似乎对了。手机上不好调试。感觉我要用台linux当客户端测试。 不知道别人有没有这样用的。

wnpllrzodiac avatar May 10 '24 09:05 wnpllrzodiac

有类似用法的,手机上确实不好调试,如果能运行 Termux 的话,可能调试起来好一些。

zfl9 avatar May 10 '24 09:05 zfl9

可以了。iptables 需要配置下

wnpllrzodiac avatar May 13 '24 14:05 wnpllrzodiac