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