首先,我这里说的公网服务包括 http,ftp,smb 等等。
目前来说,这些服务直接暴露到公网,安全问题都是小事,更关键的是 v2er 都提醒又被断网的风险。因此对应的办法:
1,只对外开放一个微屁嗯,需要访问服务的时候都通过微屁嗯连回家里的网络使用。缺点:需要安装微屁嗯客户端,而且这类客户端基本上都被墙了,在一些公共电脑上装一次客户端就得搞半天
2,通过代理服务器,比如 frc ngrok 花生壳这类,原理是客户端和代理服务器通讯,代理服务器通过 tcp 长连接和你家里服务器通讯。这样你家的服务器没有开放任何端口,但是!这样缺点也很明显,经过代理,速度太慢了。我家可是千兆宽带,经过代理能跑到 10 兆就很不错了。
所以,最近我有了一个全新的解决思路,首先我在路由器上面禁掉所有外网 ip 访问,然后,我家里路由器和我一台公网服务器保持通讯,当我需要访问家里服务器的时候,我先请求公网服务器,公网服务器发送消息给家里路由器,然后路由器仅对我当前 ip 开放访问权限。这时,我就可以直接访问我家的服务器了,而且中间没有代理,保证速度。另外,由于家里路由器平时是关闭所有外网 ip 请求的,这样也就解决了安全性以及被断网的风险。
最后,调研了实现方案,路由器上面可以使用 go 语言开发,控制访问只需要编辑 iptables 的规则即可。
目前方案还没实现,先写个思路出来,各位大佬 review 下看看还有没有什么漏洞?
|  |      1sadfQED2 OP 另外,公网服务器并不一定真的是一个服务器,可以是一个邮箱,可以是 github,或者是一个 tg 机器人都行,反正我需要连接家里服务器的时候,我能把我当前 ip 发送回家就行 | 
|  |      2jiangzm      2020-06-24 17:15:32 +08:00 太麻烦了吧,又是通过公网服务器发给路由器,然后还要写程序更新路由器防火墙规则。 | 
|  |      3CheekiBreeki      2020-06-24 17:18:13 +08:00 via Android  2 最後發現還是 vpn 方便 | 
|  |      4CloudnuY      2020-06-24 17:18:30 +08:00 我记得最近几个月在本站看过这个解决方案 | 
|  |      5k9982874      2020-06-24 17:21:40 +08:00  1 我先否定代理服务器,然后我再自己实现一个代理服务器,就是这么任性 | 
|  |      6yorkyoung      2020-06-24 17:22:31 +08:00 | 
|  |      7wtsamuel      2020-06-24 17:31:43 +08:00 我倾向于使用 zerotier 的 nat,还能直接打通多个局域网。 安全方面直接靠应用自己,比如 smb 账号密码什么的 | 
|  |      8ericbize      2020-06-24 17:32:45 +08:00 但是你一个公网服务器的成本是多少? 这个很简单啊, 你可以在云上面把 vm 装个路由系统上去,然后家里 vpn 连上去,直接端口转发就可以了。 家宽的优势在于价格吧! | 
|  |      9sadfQED2 OP | 
|  |      10jiangzm      2020-06-24 17:38:13 +08:00 我觉得可以结合 ip+mac 地址 两种白名单方式,大部分情况能覆盖到,在公司时把公司的固定 IP 加白名单,然后在外面把自己的手机 mac 地址加下白名单。 | 
|  |      11sadfQED2 OP | 
|  |      12ztxcccc      2020-06-24 17:40:03 +08:00  1 你都有服务器了,搭建一个这个吧,github 上搜 ehang-io/nps | 
|  |      16Tonni      2020-06-24 17:53:47 +08:00 开个 ss 代理,然后通过这个 ss 端口返代。 | 
|  |      17ferock PRO 我的方案 外网只提供 2 个服务 1. https 2. vpn 端口 使用 openVpn 组网,或者使用 zerotier 组大局域网 以上满足绝大部分需求,服务器为 白 群晖。 | 
|  |      18ferock PRO https 服务都是直连的。 | 
|  |      19stille      2020-06-24 18:00:20 +08:00 via iPhone 只开了一个端口给 openconnect,只开了一个证书登录账号,手机和笔记本部署好就很完美了,几乎秒登 | 
|  |      20sadfQED2 OP | 
|  |      22GreatHumorist      2020-06-24 18:11:58 +08:00 via iPhone 人楼主的意思其实是白名单机制吧…… | 
|      23cest      2020-06-24 18:14:15 +08:00 不就是 ssh port knock 监听特定 port 然後开放 ssh port 给特定 ip | 
|      25whileFalse      2020-06-24 18:37:56 +08:00 部署一个 shadow server,然后用比如 surge 之类能自己写规则的客户端搞定 | 
|  |      26lsylsy2      2020-06-24 18:50:08 +08:00 port knocking,安全方面是比较成熟的技术,但无法避免断网风险 | 
|  |      28sadfQED2 OP @GreatHumorist 是的,本质就是白名单,但是要想办法如何在任意一台公共电脑上修改白名单 | 
|      29coolcoffee      2020-06-24 19:09:54 +08:00 vpn 客户端先下载下来放到某个国内网盘不可以吗?拨号之后走的内网访问,比直接在公网上白名单安全多了,而且还不用一个个设置转发规则。 另外,你设置白名单 ip 是属于掩耳盗铃的,电信还是能知道你在家宽上搭建网站。 | 
|  |      30cjpjxjx      2020-06-24 19:14:53 +08:00 via iPhone 类似于。。。进京证? | 
|  |      31sadfQED2 OP @coolcoffee iptables 上面我把请求丢掉还能知道我达了 web 服务? | 
|      32Semidio      2020-06-24 19:38:08 +08:00 家里 ss-server 开在不常见端口,客户端内网网段走 ss 即可 | 
|  |      33yujiang      2020-06-24 19:43:28 +08:00 via Android 蒲公英,他家 VPN 大流量走的是 p2p | 
|  |      340gys      2020-06-24 20:06:26 +08:00 via Android 双向 ddns,哈哈 | 
|      35silencefly      2020-06-24 20:35:17 +08:00 via iPhone DDNS | 
|  |      36devlnt      2020-06-24 20:48:42 +08:00 蒲公英或者直接 ipsec 的 vpn 。移动端上系统自带客户端,完美解决 | 
|  |      37dullwit      2020-06-24 21:38:26 +08:00 via iPhone 我的方案是 ddns 加 wireguard (只开一个 peer ),wg 配置文件存云盘,换设备也方便导入 | 
|      38mxT52CRuqR6o5      2020-06-24 21:44:55 +08:00 via Android ddns+v2ray,v2ray 的路由规则配置能力挺强的,访问不同服务器可以自动选择不同的线路 | 
|  |      39kennylam777      2020-06-24 21:52:12 +08:00 via Android IPSec 的 IKEv2 或 IKE v1 xAuth 都不用安裝 app | 
|      40yzwduck      2020-06-24 22:57:11 +08:00 漏洞?很多。 这个方案必须完全信任运营商:1 )不会被动嗅探你的 http 流量; 2 )不会伪造 IP 主动探测你的服务; 3 )不会乱改接入端的 IP 地址。 否则:1 )以违背用户协议之名,禁掉你的网络; 2 )伪造你的身份,访问你的网络; 3 )让你连不通自己的网络。 | 
|  |      41BadAngel      2020-06-24 23:17:36 +08:00 via Android 让我想起灰鸽子? | 
|      42ochatokori      2020-06-24 23:27:34 +08:00 via Android 楼主的思路就是借助 vps 敲门 说实话这样搞是最麻烦的 个人觉得 vpn 是最兼顾易用和速度的 你说客户端被墙安装麻烦的问题,把客户端安装文件放到你服务器上需要的时候就下载就行了吧 | 
|  |      44lifanxi      2020-06-26 17:51:19 +08:00 我以为穿越了,记得以前讨论过这个问题。 找了一下,请参考: https://www.v2ex.com/t/669709 | 
|  |      45bluesky139      2020-06-26 20:18:22 +08:00 via Android @lifanxi 我也清楚的记得以前有过讨论,看了 40 多楼终于有人想起了。。 | 
|      46ungrown      2020-06-28 11:17:45 +08:00 首先遇到这类场景我反正无论如何不管怎样都开头无脑推荐 zerotier 先走一波。 反正值得一试,不行再说。 接下来具题具析:你用的思路,其实就是 Port knocking (端口敲门),只不过你这儿是 IP 敲门。 好了,结题,建议你上 github 细细搜一下,现成的实现应该不少,就算不能直接拿来用,也能直接拿来改。 | 
|  |      47greensea      2020-06-30 13:54:25 +08:00 提醒楼主可能在重新发明轮子 knock 了解一下 |