家庭服务器公网服务全新解决思路 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sadfQED2
V2EX    宽带症候群

家庭服务器公网服务全新解决思路

  •  1
     
  •   sadfQED2 2020-06-24 17:03:09 +08:00 via Android 7833 次点击
    这是一个创建于 1939 天前的主题,其中的信息可能已经有所发展或是发生改变。

    首先,我这里说的公网服务包括 http,ftp,smb 等等。

    目前来说,这些服务直接暴露到公网,安全问题都是小事,更关键的是 v2er 都提醒又被断网的风险。因此对应的办法:

    1,只对外开放一个微屁嗯,需要访问服务的时候都通过微屁嗯连回家里的网络使用。缺点:需要安装微屁嗯客户端,而且这类客户端基本上都被墙了,在一些公共电脑上装一次客户端就得搞半天

    2,通过代理服务器,比如 frc ngrok 花生壳这类,原理是客户端和代理服务器通讯,代理服务器通过 tcp 长连接和你家里服务器通讯。这样你家的服器没有开放任何端口,但是!这样缺点也很明显,经过代理,速度太慢了。我家可是千兆宽带,经过代理能跑到 10 兆就很不错了。

    所以,最近我有了一个全新的解决思路,首先我在路由器上面禁掉所有外网 ip 访问,然后,我家里路由器和我一台公网服务器保持通讯,当我需要访问家里服务器的时候,我先请求公网服务器,公网服务器发送消息给家里路由器,然后路由器仅对我当前 ip 开放访问权限。这时,我就可以直接访问我家的服务器了,而且中间没有代理,保证速度。另外,由于家里路由器平时是关闭所有外网 ip 请求的,这样也就解决了安全性以及被断网的风险。

    最后,调研了实现方案,路由器上面可以使用 go 语言开发,控制访问只需要编辑 iptables 的规则即可。

    目前方案还没实现,先写个思路出来,各位大佬 review 下看看还有没有什么漏洞?

    第 1 条附言    2020-06-24 17:43:43 +08:00
    我说的公网服务器不是用来转发流量的!!不是用来转发的!

    我说的公网服务器只是为了有个地方和路由器通讯,这个公网服务器可以是一台服务器,但是也可能是一个邮箱,也可能是 github 。反正只要能够存数据,然后路由器能够轮训就行
    47 条回复    2020-06-30 13:54:25 +08:00
    sadfQED2
        1
    sadfQED2  
    OP
       2020-06-24 17:13:20 +08:00
    另外,公网服务器并不一定真的是一个服务器,可以是一个邮箱,可以是 github,或者是一个 tg 机器人都行,反正我需要连接家里服务器的时候,我能把我当前 ip 发送回家就行
    jiangzm
        2
    jiangzm  
       2020-06-24 17:15:32 +08:00
    太麻烦了吧,又是通过公网服务器发给路由器,然后还要写程序更新路由器防火墙规则。
    CheekiBreeki
        3
    CheekiBreeki  
       2020-06-24 17:18:13 +08:00 via Android   2
    最後是 vpn 方便
    CloudnuY
        4
    CloudnuY  
       2020-06-24 17:18:30 +08:00
    我记得最近几个月在本站看过这个解决方案
    k9982874
        5
    k9982874  
       2020-06-24 17:21:40 +08:00   1
    我先否定代理服务器,然后我再自己实现一个代理服务器,就是这么任性
    yorkyoung
        6
    yorkyoung  
       2020-06-24 17:22:31 +08:00
    借楼同问,可以通过这种 NAT 服务得到固定外网 IP 吗?
    wtsamuel
        7
    wtsamuel  
       2020-06-24 17:31:43 +08:00
    我倾向于使用 zerotier 的 nat,还能直接打通多个局域网。
    安全方面直接靠应用自己,比如 smb 账号密码什么的
    ericbize
        8
    ericbize  
       2020-06-24 17:32:45 +08:00
    但是你一个公网服务器的成本是多少?
    这个很简单啊, 你可以在云上面把 vm 装个路由系统上去,然后家里 vpn 连上去,直接端口转发就可以了。
    家宽的优势在于价格吧!
    sadfQED2
        9
    sadfQED2  
    OP
       2020-06-24 17:33:54 +08:00
    @jiangzm 最终实现后可能就是路由器上面装一个插件


    @k9982874 我这种并不是代理啊,只是控制防火墙规则,公网服务器只是为了有个固定的地方和路由器通讯


    @yorkyoung 不能,相当于只是动态维护防火墙规则
    jiangzm
        10
    jiangzm  
       2020-06-24 17:38:13 +08:00
    我觉得可以结合 ip+mac 地址 两种白名单方式,大部分情况能覆盖到,在公司时把公司的固定 IP 加白名单,然后在外面把自己的手机 mac 地址加下白名单。
    sadfQED2
        11
    sadfQED2  
    OP
       2020-06-24 17:38:56 +08:00
    @wtsamuel 家里的服务很多不能保证安全,比如我服务器上面就装了一堆个人开源的 xxxDownload,这种东西谁都不知道有多少漏洞


    @ericbize 公网服务器并不一定是一个真正的服务器啊,可能是一个邮箱?需要使用的时候往家里发封邮件,或者是一个 github 私有项目,需要的时候上去改一行配置。路由器轮训邮箱或者 github,检查到规则变化就更新防火墙。之所以不愿意经过服务器转发是为了通讯速度,云服务器那 1M 2M 带宽,转发我千兆带宽有什么意义
    ztxcccc
        12
    ztxcccc  
       2020-06-24 17:40:03 +08:00   1
    你都有服务器了,搭建一个这个吧,github 上搜 ehang-io/nps
    sadfQED2
        13
    sadfQED2  
    OP
       2020-06-24 17:40:29 +08:00
    @jiangzm 这个想法好
    sadfQED2
        14
    sadfQED2  
    OP
       2020-06-24 17:41:32 +08:00
    @ztxcccc 我不是要做转发,转发经过服务器代理,太慢了
    ztxcccc
        15
    ztxcccc  
       2020-06-24 17:44:39 +08:00
    @sadfQED2 p2p,完整文档里看看
    Tonni
        16
    Tonni  
       2020-06-24 17:53:47 +08:00
    开个 ss 代理,然后通过这个 ss 端口返代。
    ferock
        17
    ferock  
    PRO
       2020-06-24 17:57:15 +08:00
    我的方案

    外网只提供 2 个服务
    1. https
    2. vpn 端口

    使用 openVpn 组网,或者使用 zerotier 组大局域网
    以上满足绝大部分需求,服务器为 白 群晖。
    ferock
        18
    ferock  
    PRO
       2020-06-24 17:59:35 +08:00
    https 服务都是直连的。
    stille
        19
    stille  
       2020-06-24 18:00:20 +08:00 via iPhone
    只开了一个端口给 openconnect,只开了一个证书登录账号,手机和笔记本部署好就很完美了,几乎秒登
    sadfQED2
        20
    sadfQED2  
    OP
       2020-06-24 18:07:14 +08:00
    sadfQED2
        21
    sadfQED2  
    OP
       2020-06-24 18:08:01 +08:00
    @stille 那当你某个时候需要用公用电脑登录的时候呢
    GreatHumorist
        22
    GreatHumorist  
       2020-06-24 18:11:58 +08:00 via iPhone
    人楼主的意思其实是白名单机制吧……
    cest
        23
    cest  
       2020-06-24 18:14:15 +08:00
    不就是 ssh port knock
    监听特定 port
    然後开放 ssh port 给特定 ip
    Muniesa
        24
    Muniesa  
       2020-06-24 18:21:05 +08:00 via Android
    @jiangzm mac 地址在公网获取不了吧
    whileFalse
        25
    whileFalse  
       2020-06-24 18:37:56 +08:00
    部署一个 shadow server,然后用比如 surge 之类能自己写规则的客户端搞定
    lsylsy2
        26
    lsylsy2  
       2020-06-24 18:50:08 +08:00
    port knocking,安全方面是比较成熟的技术,但无法避免断网风险
    ferock
        27
    ferock  
    PRO
       2020-06-24 18:58:38 +08:00
    @sadfQED2 #20

    并不担心
    sadfQED2
        28
    sadfQED2  
    OP
       2020-06-24 19:07:15 +08:00 via Android
    @GreatHumorist 是的,本质就是白名单,但是要想办法如何在任意一台公共电脑上修改白名单
    coolcoffee
        29
    coolcoffee  
       2020-06-24 19:09:54 +08:00
    vpn 客户端先下载下来放到某个国内网盘不可以吗?拨号之后走的内网访问,比直接在公网上白名单安全多了,而且还不用一个个设置转发规则。

    另外,你设置白名单 ip 是属于掩耳盗铃的,电信还是能知道你在家宽上搭建网站。
    cjpjxjx
        30
    cjpjxjx  
       2020-06-24 19:14:53 +08:00 via iPhone
    类似于。。。进京证?
    sadfQED2
        31
    sadfQED2  
    OP
       2020-06-24 19:27:28 +08:00 via Android
    @coolcoffee iptables 上面我把请求丢掉还能知道我达了 web 服务?
    Semidio
        32
    Semidio  
       2020-06-24 19:38:08 +08:00
    家里 ss-server 开在不常见端口,客户端内网网段走 ss 即可
    yujiang
        33
    yujiang  
       2020-06-24 19:43:28 +08:00 via Android
    蒲公英,他家 VPN 大流量走的是 p2p
    0gys
        34
    0gys  
       2020-06-24 20:06:26 +08:00 via Android
    双向 ddns,哈哈
    silencefly
        35
    silencefly  
       2020-06-24 20:35:17 +08:00 via iPhone
    DDNS
    devlnt
        36
    devlnt  
       2020-06-24 20:48:42 +08:00
    蒲公英或者直接 ipsec 的 vpn 。移动端上系统自带客户端,完美解决
    dullwit
        37
    dullwit  
       2020-06-24 21:38:26 +08:00 via iPhone
    我的方案是 ddns 加 wireguard (只开一个 peer ),wg 配置文件存云盘,换设备也方便导入
    mxT52CRuqR6o5
        38
    mxT52CRuqR6o5  
       2020-06-24 21:44:55 +08:00 via Android
    ddns+v2ray,v2ray 的路由规则配置能力挺强的,访问不同服务器可以自动选择不同的线路
    kennylam777
        39
    kennylam777  
       2020-06-24 21:52:12 +08:00 via Android
    IPSec 的 IKEv2 或 IKE v1 xAuth 都不用安 app
    yzwduck
        40
    yzwduck  
       2020-06-24 22:57:11 +08:00
    漏洞?很多。
    这个方案必须完全信任运营商:1 )不会被动嗅探你的 http 流量; 2 )不会伪造 IP 主动探测你的服务; 3 )不会乱改接入端的 IP 地址。
    否则:1 )以违背用户协议之名,禁掉你的网络; 2 )伪造你的身份,访问你的网络; 3 )让你连不通自己的网络。
    BadAngel
        41
    BadAngel  
       2020-06-24 23:17:36 +08:00 via Android
    让我想起灰鸽子?
    ochatokori
        42
    ochatokori  
       2020-06-24 23:27:34 +08:00 via Android
    楼主的思路就是借助 vps 敲门
    说实话这样搞是最麻烦的

    个人觉得 vpn 是最兼顾易用和速度的
    你说客户端被墙安装麻烦的问题,把客户端安装文件放到你服务器上需要的时候就下载就行了吧
    jh163888
        43
    jh163888  
       2020-06-25 08:51:13 +08:00 via iPhone
    @stille 可是你却经常把自己折腾挂
    lifanxi
        44
    lifanxi  
       2020-06-26 17:51:19 +08:00
    我以为穿越了,记得以前讨论过这个问题。
    找了一下,请参考: t/669709
    bluesky139
        45
    bluesky139  
       2020-06-26 20:18:22 +08:00 via Android
    @lifanxi 我也清楚的记得以前有过讨论,看了 40 多楼终于有人想起了。。
    ungrown
        46
    ungrown  
       2020-06-28 11:17:45 +08:00
    首先遇到这类场景我反正无论如何不管怎样都开头无脑推荐 zerotier 先走一波。
    反正值得一试,不行再说。

    接下来具题具析:你用的思路,其实就是 Port knocking (端口敲门),只不过你这儿是 IP 敲门。
    好了,结题,建议你上 github 细细搜一下,现成的实现应该不少,就算不能直接拿来用,也能直接拿来改。
    greensea
        47
    greensea  
       2020-06-30 13:54:25 +08:00
    提醒楼主可能在重新发明轮子

    knock 了解一下
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5454 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 06:48 PVG 14:48 LAX 23:48 JFK 02:48
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86