家庭网络环境部署方案 收集&请教

321 天前
 caneman
2178 次点击
所在节点    路由器
28 条回复
yukinomiu
316 天前
@caneman
给你举个形象的例子吧. 在国内的 A 要给在国外的 B 邮寄包裹:

- 直接连接: 包裹上, 发件人是 A, 收件人是 B, 包裹直接投递给邮局; 但是邮局会把你的包裹给扔掉;

- 使用代理协议连接: 国内 A 有个国外的朋友 C, C 有个特殊渠道, 邮寄给 C 的包裹, 不会被国内邮局扔掉. 于是, A 把包裹的收件人改为 C, 发件人还是 A, 保持不变. 然后, A 在包裹里塞了张纸条, 上面写着这个包裹真正的收件人是 B, 再把包裹投递给国内邮局. 国内邮局收到了包裹, 按收件人地址, 把包裹交给了国外的 C. C 收到了包裹之后, 打开包裹, 看到纸条, 然后把包裹收件人涂改为 B, 重新发给国外的邮局, 最终 B 收到了包裹;

- 透明代理: 包裹上, 发件人是 A, 收件人是 B, 包裹直接投递给邮局. 但是在投递过程中, 被 D 截胡了. D 一看这个包裹收件人是 B, 直接给国内邮局肯定会被丢掉, 于是 D 擅自把收件人改为了 C, 里面塞了一张纸条, 写着真正的收件人是 B, 国内邮局收到了包裹, 按收件人地址, 把包裹交给了国外的 C. C 收到了包裹之后, 打开包裹, 看到纸条, 然后把包裹收件人涂改为 B, 重新发给国外的邮局, 最终 B 收到了包裹;

A: 需要被代理的应用
B: 目的地址, 被屏蔽的地址
C: 代理远端(国外端)
D: 透明代理

代理需要解决的一个问题是, 如何得知真正的目的地址.
- 使用代理协议, 你的应用(需要被代理的软件程序, 或者硬件设备)需要先通过代理协议, 和代理建立通讯, 应用会在代理协议握手阶段, 告诉代理自己的真实意图(目的地址)是什么, 这样代理后续才能正确的把数据送到正确的地方. 此时, 应用是知道代理的存在的, 毕竟自己是和代理通讯, 而不是和目的方通讯. 代理协议常见的有 SOCKS 协议(版本 5, 版本 4, 版本 4a)和 HTTP(HTTPS)协议;

- 使用透明代理, 那么应用还是和往常一样, 直接发送数据. 但是这个数据会被透明代理劫持. 被劫持的应用, 根本感知不到自己的数据被劫持了, 站在应用的角度, 代理貌似不存在一样, 因为应用自己认为自己是直接和目的方通讯的, 这就是"透明"的由来.

普通代理, 需要你的应用支持代理协议, 然后你得去配置, 比如设置操作系统的代理, 设置任天堂 Switch 游戏机使用 HTTP 代理等等. 对于不支持的配置代理的应用或者设备, 就无能为力了, 同时每个支持的设备都去配置, 也很繁琐, 这就是普通代理的弊端.

透明代理, 不需要应用去配置, 直接使用即可, 简单方便. 但是代价是, 透明代理部署起来比较复杂, 要配合 linux 操作系统的 tproxy 或者 redirect 才能做到, 再加上 linux 的路由表配置和 iptables 配置, 很麻烦, 配置错了可能直接 SSH 都连不上了(因为也被劫持了), 很劝退. 但是一旦配置好, 后面就基本不用维护了, 新设备只要使用透明代理作为网关, 就可以直接科学.

如果要用透明代理, 最常见的做法就是, 在你的内网里, 部署一台 linux, 可以是虚拟机(docker 不行, 因为劫持流量要操作系统配合), 可以是物理机, 然后这台 linux 上配置好代理软件, 配置好路由表和 iptables, 那么这台设备, 就可以劫持并代理收到的流量. 然后, 内网的其他设备或者软件, 把网关 gateway 设置为这台设备就可以了.

如果只是用普通代理, 就是走代理协议的, 那就相对简单多了, 内网的一个软件或者一个设备, 跑一个代理程序, 然后其他需要被代理的软件/设备, 设置代理地址为代理程序即可.
yukinomiu
316 天前
接上一条:

普通代理, 软件就是你说的哪些; 透明代理, V2 之类的也都支持, 看文档部署即可. 目前我用的自己写的软件做透明代理, 避免公交车协议被爆破, 私家车相对安全一点. 上面留了联系方式, 还有不懂的可以联系讨论, 一起折腾.

分流就是让国内的流量直接连接, 国外的流量被代理, 加速国内访问, 减少代理流量消耗. 分流方案也有很多, 细节按下不说, 目前为止我觉得没有一种方式比较完美, 或多或少都有一些局限性. 我的选择是手动分流.
就是说, 搞 2 个网络, 网络 A 全部直接连接, 网络 B 全部走透明代理. 然后这两个网络使用两个 WIFI SSID, 设备一般情况直连 A, 需要科学的时候, 手动切 WIFI, 连到网络 B 即可. 麻烦一点, 但是也还能接受.

下面说的 DNS 分流, 只是内部分流细节, 依据什么去分流. 常见的做法是通过 IP 地址去分流, 先收集国内外 IP 地址, 再按 IP 分支分组去分流, 比如国内 IP 走直连, 国外的走代理. 但是 IP 分流有个问题就是大多数场景都是通过域名去访问的, 软件程序很少会把目的地址 IP 写死. 所以就有了按域名去分流. 但是, 应用再发起数据通讯之前, 往往要先进行一次 DNS 查询, 所以这里又可以展开...

最后, 不论怎么折腾, 都不建议在路由器上做这些事情. 路由器交换机 AP 这些应该是底层网络基础设施, 是地基; 代理科学和媒体服务器一样, 是上层设施, 提供更多功能性便利, 这些应该分开. 基础网络是负责网络连接, 代理科学走单独的设备去做, 这样代理崩了也不至于整个网络瘫痪. 好比家居里电视坏了, 影响的应该只是看不了电视, 而不是电视坏了直接停水停电. 如果要搞清楚这些, 还是得去学习网络基础知识, 查阅方向的话, 建议买本书啃, 系统性学习. 或者, mikrotik 官方的文档也可以看看, 虽然是写路由器的, 但是往往会写写基础理论知识和原理, 附地址: https://help.mikrotik.com/docs/display/ROS/RouterOS
caneman
311 天前
@yukinomiu #22 感谢老哥解答!! 老哥说的几种方案名词之类的我是知道啥意思的,就是不知道具体该怎么实现。

这周末 J4125 也到货了,懒得折腾,最后还是采用了 esxi + openwrt 做主路由负责拨号,硬路由当 ap ,我的使用场景没那么复杂,就是全屋代理,openwrt 做旁路由的话,接入设备得手动填写网关地址,我嫌麻烦。

老哥的方案现在我大概可以理解了,两个 WIFI 的话,既可以规避手动填网关地址的麻烦,又可以实现科学/直连隔离。但是现在刚入手 J4125 ,我打算先按照我现在的配置用一段时间,目前感觉还比较稳,等遇到问题或者新的需求了再试试别的方案。
faydao
306 天前
@caneman J4125 买的工控成品吗
sheepyoung
164 天前
@caneman 我就是 openwrt 做的主路由拨号,开科学插件,3 个硬路由 ap mesh 组网,不乱折腾,稳定运行 2 个月了。
sheepyoung
69 天前
@sheepyoung 我之前也是这个方案,但是 openwrt 主路由拨号很不稳定,经常断开(他也会自动重连)很影响体验,后来换成 ikuai 来拨号(没断开过,除了运营商 20 天自动回收 ip 会断开重连),openwrt 作为科学网关。
caneman
69 天前
@faydao 是的,畅网 j4125 i226-v

@sheepyoung 是不是跟固件版本有关,感觉很玄学,我用的高大全的某个版本,目前还没有遇到端口的情况,稳定运行 9 个月了
sheepyoung
68 天前
@caneman 我用过天灵,lede 都有这个问题,不想折腾了直接有了 ikuai

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/954817

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX