“回家的诱惑”:论如何更优雅的回家

Posted by me2in Blog on November 30, 2020

前言:

​ 随着家中设备越来越多,开的服务也越来越多:群辉、jellyfin、qBittorrent、等等。当我想在外网访问某个服务时,该怎么办?

​ 就目前我所知的,想在外网连回家无非就这几种方案:

  1. vpn
  2. 家中开ss/v2ray服务
  3. frp/nps
  4. zerotier

​ 前两者都必须有公网ip,后两者不需要。但后两者是借助另外的服务器实现的,通常家庭的上行带宽都是大于服务器的下行带宽的,整体速度受限于服务器带宽,有公网ip时不是个好选择。

​ 我有公网ip,自然就只考虑了前两种方案,在比较了vpn和ss方案后,最终选择了ss这种方案。自然vpn是能满足需求的,但vpn也有他的问题:

  1. vpn工作模式是将我们所有的请求都拦截并转发,这意味着即使你访问baidu这样的网站,数据包也会回家绕一圈才到你的设备上,请求时间会增加,这是不合理的。
  2. 如果你是在像公司这种地方使用,公司内网也会有其他的局域网服务需要访问,基于【问题1】,可以知道这些服务也是会访问不通的。
  3. 虽然有像openvpn这样’‘智能’‘分流的方案,但维护这样一个list,工作量也不小。
  4. 无法同时使用翻墙代理和vpn。既想回家又想翻墙的时候就只能让翻墙流量也回家,不理想的方案。

​ 那使用ss服务器这种方案,对于我现在的使用习惯改变最小,只需要新增一台服务器,加一条分流规则即可。原先的软件可以继续用,也可继续使用大佬们已有的规则,工作量上最小,nice~

那要怎么做?

  1. 在家中建立一个ss服务器,设置路由器的端口映射,让服务暴露在公网上。
  2. 设置ddns,定时更新ip。
  3. 在手机或者电脑中增加一台ss服务器,设置好分流规则,让访问家庭局域网的请求走这台服务器。

开始前的准备工作:

  1. 公网ip!公网ip! 公网ip!虽然也可以用vps+frp/nps,但是会受到vps带宽限制,效果很差。
  2. 一个域名用来ddns,如果不想申请域名,也可以使用duckdns,有docker版的方便使用。
  3. 建议将家中的网段设置为不常用的网段,避免网段冲突,比如192.168.117.x。如果你在公司也有内网服务,比如192.168.2.110,这样分开两个网段就不会相互影响了。

服务器端:

​ 这里以openwrt为例,找到vpn->v2ray服务器,在这里新建一个ss服务器,加密方式可以不用高级加密,国内流量是不过墙的,用不着高级加密。

2023-6-26 更新:请选择类似”aes-256-gcm”这种高级加密,否则高版本的clash内核可能不支持

image-20201204165451517

新建完成,点击“保存并应用”,返回到主页后,确保如下两个是勾选的,再最下边的点击“保存并应用”

image-20201204165722010

设置ddns和端口映射

略。。 自行搜索相关教程

设备端:

​ 在保证你的服务已经在公网可以访问之后(使用tcping工具测试端口是否打开),就可以在设备端进行设置了。本人只有iphone和pc,就介绍ios和windows设置。

IOS设备:

​ 我主用quan,这里只以quan来示例。为什么使用quan而不用其他软件,是因为quan有个很棒的功能,可以根据环境自动选择代理方式。比如当我们在外边时,是需要使用代理连回家中的,但当我回到家时,这时候就应该直连,而不是从外网绕一圈再回来,quan的策略功能就可以做到这一点。

  1. 在quan中新建一个ss服务器,名称为BackHome,配置按你自己的填。384d544a8be5832e61060917267d002

  2. 设置中找到“策略”,点右上角+号新增一条策略,名称为“ConenectHomeEnv”。分别选择WI-FI跟蜂窝网为刚刚新加的BackHome节点。重点来了:点击“添加SSID行为”,输入你家WIFI的名字,策略选择为DIRECT。最终设置完成如下图,点击保存。 74fd6cd974ed8a892af76db46f74f73

  3. 进入“设置-分流”,增加一条规则如下图所有,点击保存。图中的ip地址要根据你自己家的网段来设置,如果说你家网段是192.168.100.x,那就要相应的改为”192.168.100.0/24”。 8e91976a3d90ba9589fd5df622554a8

  4. 完成以上设置后,打开quan的开关,在浏览器中输入家中服务器ip,此时应该是可以打开了。其他的软件也可以通过内网ip访问家中的服务,比如群辉或者jellyfin等等。

windows设备:

​ windows端我使用的是clash for windows(以下用cfw代称),如果你还不了解clash是什么,那建议先了解一下这款非常强大的代理分流软件。使用clash可以实现很多你想不到的骚操作,强烈推荐👍。

​ 默认情况下局域网的流量是不会走cfw的,要想让这部分流量也代理的话就必须安装tap device,我的理解是这就相当于上边提到的vpn。除此之外还会使用到”mixin”,它可以在不修改profile的情况下动态修改配置信息,如果你是使用机场的订阅地址,使用这个功能就很方便。

  1. 在cfw中点击“tap device”,出现弹框点击确定,如果出现软件安装,则一直点击next。

微信截图_20201204141616

  1. 安装完成后,在网络中会出现一个“cfw-tap的设备”。 微信截图_20201204141733

  2. 回到cfw,找到settings-profile mixin,将type改为javascript,点击editor,将编辑框中的代码改为以下内容,点“save”保存。

    module.exports.parse = ({ content, name, url }, { yaml, axios, notify }) => {
        const proxy = {
        name: "backHome",
        type: "ss",
        server: "example.cc",  //修改为你的ddns域名
        port: 2048, //ss映射端口
        password: "password", //密码
        cipher: "aes-128-cfb"
      }
      const proxyGroup = {
        name: 'BackHome',
        type: 'select',
        proxies: ['backHome']
      }
      const rule = 'IP-CIDR,192.168.123.0/24,BackHome' // 192.168.123.0/24改为你家的网段
      return {...content,proxies:[...content.proxies,proxy],
    		'proxy-groups':[...content['proxy-groups'],
    		 proxyGroup]} 
    }
    
  3. 同时打开mixin和system proxy开关,让配置项生效。

微信截图_20201204141946

  1. 完成上面的设置就已经可以像在家一样随意访问家里设备了,甚至你还可将家中的nas映射为网络硬盘。
  2. 想要学习其他的骚操作,请查看官方的文档Clash for Windows

总结:

​ 其实使用ss或者v2ray连回家的教程在网上有很多,但几乎都是告诉你用全局模式,这并不是我理想中的解决方案。对于“回家”这件事,只让这部分的局域网流量请求走回家这条线路即可,国内或者国外的请求应该正常的走本地网络,特别是如果你像我一样,本地网络有其他局域网服务访问,那就更不能使用类似全局代理这种方式了。这个世代的代理软件都有很核心的功能:规则分流,然而却很少有教程提及这部分。不仅如此教程内容还非常雷同,不禁让人感慨中文的高质量文真的太少。

多说一点:

​ 很多人不理解为什么要连回家,如果你在家中没有群辉,jellyfin这样的服务,自然是没有这种需求的。如果有的话,使用这种方案的好处有很多:

  1. 可以对外只暴露一个端口,后期增加服务不用再映射端口。而且还是加密的,不用担心暴露破解问题。
  2. 部分isp是会封锁http服务的,不论你起在哪个端口,比如我的jellyfin好好运行了几天之后就莫名其妙被封了。而这种方式并不对外暴露http服务,isp通常不识别ss流量,那自然也不会封端口了。
  3. 对于黑群用户而言,qc服务是无法使用的。这意味无法方便在家庭以外的环境之前同步照片,访问家里的nas设备。如果通过端口映射的方式,要研究需要暴露那些端口才能完整的访问服务(我就没弄懂)。使用ss服务器则没有这种问题,在外边跟家中一样,使用局域网ip即可正常使用群晖的服务,还更安全了。
  4. 可以用同一份配置(ip)访问服务,无需切换。