需求说明
需求收集
- 所有设备都想访问Samba共享
- 部分设备需要完全科学网络- 机顶盒原生
- 数据安全考量(仅供参考)
- 强制数据流走向
 
- 部分应用只需要socks/http代理- SmartTubeNg支持第三方YouTube,仅需socks代理即可
- chrome浏览器用Proxy SwitchyOmega上网
 
- 科学节点数量有限- 分享出去可以突破
- 分享到广域网也可以。注意安全
 
科学方法及规划
这里不讨论分流问题,分流自己用浏览器插件控制
- 插入特定物理网口完全科学
- 设置指定网关即可完全科学
- 指定socks代理可以自定义流量规则
- 默认网络不科学,不干扰日常流量
整理需要实现:
- 可以运行任何一款科学软件
- 在全局提供socks代理
- 提供一个完全科学的物理网口
- 提供手动完全可以的网关,并嵌入原始局域网网段
整体网络结构
graph TB
    PhyIface>实体硬件网口]
    VmBridge>虚拟网桥]
    VmMachine>虚拟机]
    classDef CssGreen fill:#9f6,stroke:#333,stroke-width:2px;
    classDef CssOrange fill:#f96,stroke:#333,stroke-width:4px;
    classDef CssRed    fill:#ff0,stroke:#333,stroke-width:4px;
    classDef CssReal    fill:#666,stroke:#333,stroke-width:4px;
    class PhyIface CssOrange
    class VmBridge CssRed
    class VmMachine CssGreen
graph TB
    BrDial(虚拟网桥/光猫拨号网络/分配物理网口ens0p0)
    BrHome(虚拟网桥/普通家庭网络/分配物理网口ens1p0)
    BrGfwPhy(一体机物理网口ens2p0/即插即纯科学)
    
    BrDialPhy(一体机物理网口ens0p0)
    BrHomePhy(一体机物理网口ens1p0)
    Modem(光猫)
    SwitchPoe(交换机/选配POE)  
    subgraph VmSubDial[Vm拨号主路由]
        DialRouter[拨号, 流控, AC管理器]
        DiagWan0[Wan0] --> DialRouter
        DialRouter --> DialLan0[Lan0
192.168.1.1]
    end
    BrDialPhy --> BrDial
    BrDial  --> DiagWan0
    subgraph SubPhyRouter[实体拨号主路由]
        SubPhyRouterWan[Wan0]
        SubPhyRouterWan --> SubPhyRouterOp[物理拨号路由]
        SubPhyRouterOp --> SubPhyRouterOpLan0[Lan0
192.168.1.1]
    end
    subgraph SubVmService[虚拟服务节点]
        LXC -.-> Media(多媒体服务)
        Media -.-> Emby        
        Media -.-> NasTools
        Media -.-> Dsm
        Media -.-> Alist
        Media -.-> Qb[Qb/Tr下载]
        LXC -.-> HA
        LXC -.-> Frp
        
    end
    subgraph SubGfwService[科学服务]
        GfwClash[各种科学软件
Clash/SSR/熊猫]
        GfwProxy[代理服务
socks:1090
http:1091]
        GfwPhyIface[完全科学网口
192.168.2.x/dhcp/dns]
    end
    BrHome === BrHomePhy
    BrHomePhy === SwitchPoe
    subgraph SubRealDevice[实体物理设备]
        SwitchPoe --> APx(AP0/AP1/APx)    
        SwitchPoe --> IPTV(IPTV)
        SwitchPoe --> TV(电视/台式机)
        APx --> Mobile(手机)
        APx --> Tablet(平板)
        APx --> Laptio(笔记本)
        APx --> Device(智能家居)
    end
    BrHome --> LXC(家用服务Vm/Docker/LXC)
    BrHome === SubGfwService
    SubRealDevice -.-> SubGfwService
    SubVmService -.-> SubGfwService 
    
    Modem -->|使用虚拟路由拨号| BrDialPhy
    
    DialLan0 -->|使用虚拟路由拨号| BrHome
    Modem -.->|使用物理路由拨号| SubPhyRouterWan
    SubPhyRouterOpLan0 -.->|使用物理路由拨号| BrHomePhy
    classDef CssGreen fill:#9f6,stroke:#333,stroke-width:2px;
    classDef CssOrange fill:#f96,stroke:#333,stroke-width:4px;
    classDef CssRed    fill:#ff0,stroke:#333,stroke-width:4px;
    classDef CssReal    fill:#666,stroke:#333,stroke-width:4px;
    classDef CssGfw    fill:#AAAAAA,stroke:#333,stroke-width:4px;
    class BrDial,BrHome,BrGfw CssOrange
    class VmSubDial,SubVmService CssGreen
    class SubVmService CssGreen
    class BrGfwPhy,BrHomePhy,BrDialPhy CssRed
    class SubRealDevice CssReal
    class SubPhyRouter CssReal
    class Modem CssReal
    class SubGfwService CssGreen
科学部分
graph TB
    BrHome(虚拟网桥/普通家庭网络/分配物理网口ens1p0)
    BrGfw(虚拟网桥/Gfw科学网络/分配物理网口ens2p0)
    
    BrHomePhy(一体机物理网口ens1p0)
    BrGfwPhy(一体机物理网口ens2p0/即插即纯科学)
    DialLan0[主网关192.168.1.1]
    DialLan0 ==> BrHome
    subgraph SubVmWin0[Vm科学机/Win7]
        SubVmWin0Eth(网卡/静态
192.168.1.112)
        GfwSw(科学软件
Clash/SSR/熊猫)
        GfwProxy(代理服务socks/http
socks:1090
http:1091)
        GfwVpn(对内VPN)
        SubVmWin0Eth --> GfwSw
        GfwSw --> GfwProxy
        GfwSw -.-> GfwVpn
    end
    subgraph SubVmOp1[Vm路由1
]
        SubVmOp1OpWan[Wan0
192.168.1.x] --> SubVmOp1Op
        SubVmOp1Op[全局子网流量转代理
LAN->Proxy
Clash/SSR/PassWall]
        SubVmOp1Op --> SubVmOp1OpLan[Lan0
192.168.2.242]
    end
    subgraph SubVmOp2[Vm路由2/旁路由网关]
        SubVmOp2OpWan[Wan0
192.168.2.x] --> SubVmOp2Op
        SubVmOp2Op[旁路由器/关闭DHCP]
        SubVmOp2Op --> SubVmOp2OpLan[Lan0
192.168.1.242]
    end
    BrHome --> SubVmWin0Eth
    GfwProxy --> BrHome
    BrHome === BrHomePhy
    
    
    BrHome --> SubVmOp1OpWan
    SubVmOp1Op -.->  GfwProxy
    SubVmOp1OpLan --> BrGfw
    BrGfw --> SubVmOp2OpWan
    BrGfw --> BrGfwPhy
    SubVmOp2OpLan --> BrHome
    
    classDef CssGreen fill:#9f6,stroke:#333,stroke-width:2px;
    classDef CssOrange fill:#f96,stroke:#333,stroke-width:4px;
    classDef CssRed    fill:#ff0,stroke:#333,stroke-width:4px;
    classDef CssReal    fill:#666,stroke:#333,stroke-width:4px;
    class BrDial,BrHome,BrGfw CssOrange
    class SubVmWin0,SubVmOp1,SubVmOp2,VmSubDial,SubVmService CssGreen
    class SubVmService CssGreen
    class BrGfwPhy,BrHomePhy,BrDialPhy CssRed
    class SubRealDevice CssReal
    class SubPhyRouter CssReal
测试点预期流量
graph TB
    BrHome(虚拟网桥/普通家庭网络/分配物理网口ens1p0)
    BrGfw(虚拟网桥/Gfw科学网络/分配物理网口ens2p0)
    
    BrHomePhy(一体机物理网口ens1p0)
    BrGfwPhy(一体机物理网口ens2p0/即插即纯科学)
    DialLan0[主网关192.168.1.1]
    DialLan0 ==> BrHome
    subgraph SubVmWin0[Vm科学机/Win7]
        SubVmWin0Eth(网卡/静态
192.168.1.112)
        GfwSw(科学软件
Clash/SSR/熊猫)
        GfwProxy(代理服务socks/http
socks:1090
http:1091)
        GfwVpn(对内VPN)
        SubVmWin0Eth --> GfwSw
        GfwSw --> GfwProxy
        GfwSw -.-> GfwVpn
    end
    subgraph SubVmOp1[Vm路由1]
        SubVmOp1OpWan[Wan0
192.168.1.x] --> SubVmOp1Op
        SubVmOp1Op[全局子网流量转代理
LAN->Proxy
Clash/SSR/PassWall]
        SubVmOp1Op --> SubVmOp1OpLan[Lan0
192.168.2.242]
    end
    subgraph SubVmOp2[Vm路由2/旁路由网关]
        SubVmOp2OpWan[Wan0
192.168.2.x] --> SubVmOp2Op
        SubVmOp2Op[旁路由器/关闭DHCP]
        SubVmOp2Op --> SubVmOp2OpLan[Lan0
192.168.1.242]
    end
    BrHome --> SubVmWin0Eth
    GfwProxy --> BrHome
    BrHome === BrHomePhy
    
    
    BrHome --> SubVmOp1OpWan
    SubVmOp1Op -.->  GfwProxy
    SubVmOp1OpLan --> BrGfw
    BrGfw --> SubVmOp2OpWan
    BrGfw --> BrGfwPhy
    SubVmOp2OpLan --> BrHome
    TestPoint0[测试点0
网关192.168.1.1] --> BrHome
    TestPoint1[测试点1
网关192.168.1.242] --> BrHome
    TestPoint2[测试点2
网关192.168.2.244] --> BrGfw
    TestPoint0 -.->|预期流量1| DialLan0
    TestPoint0 -.->|预期流量2| GfwProxy
    TestPoint1 -.->|预期流量| SubVmOp2OpLan
    TestPoint2 -.->|预期流量| SubVmOp1OpLan
    
    classDef CssGreen fill:#9f6,stroke:#333,stroke-width:2px;
    classDef CssOrange fill:#f96,stroke:#333,stroke-width:4px;
    classDef CssRed    fill:#ff0,stroke:#333,stroke-width:4px;
    classDef CssReal    fill:#666,stroke:#333,stroke-width:4px;
    class BrDial,BrHome,BrGfw CssOrange
    class SubVmWin0,SubVmOp1,SubVmOp2,VmSubDial,SubVmService CssGreen
    class SubVmService CssGreen
    class BrGfwPhy,BrHomePhy,BrDialPhy CssRed
    class SubRealDevice CssReal
    class SubPhyRouter CssReal
旁路由有简化版本
如果你不需要一个可以即插即用的物理科学网口,可以做一些简化,去掉VM路由1部分
graph TB
    BrHome(虚拟网桥/普通家庭网络/分配物理网口ens1p0)
    
    BrHomePhy(一体机物理网口ens1p0)
    DialLan0[主网关192.168.1.1]
    DialLan0 ==> BrHome
    subgraph SubVmWin0[Vm科学机/Win7]
        SubVmWin0Eth(网卡/静态
192.168.1.112)
        GfwSw(科学软件
Clash/SSR/熊猫)
        GfwProxy(代理服务socks/http
socks:1090
http:1091)
        GfwVpn(对内VPN)
        SubVmWin0Eth --> GfwSw
        GfwSw --> GfwProxy
        GfwSw -.-> GfwVpn
    end
    subgraph SubVmOp2[Vm路由2/旁路由网关]
        SubVmOp2OpWan[Wan0
192.168.2.x
非必须设置
网卡都可以不需要] -.-> SubVmOp2Op
        SubVmOp2Op[旁路由器/关闭DHCP
流量转代理
LAN->Proxy
Clash/SSR/PassWall]
        SubVmOp2Op --- SubVmOp2OpLan[Lan0
192.168.1.242]
    end
    BrHome --> SubVmWin0Eth
    GfwProxy --> BrHome
    BrHome === BrHomePhy
    SubVmOp2Op -.->|预期科学流量| GfwProxy
    SubVmOp2Op -.->|预期普通流量| BrHome
    
    
    SubVmOp2OpLan --- BrHome
    
    classDef CssGreen fill:#9f6,stroke:#333,stroke-width:2px;
    classDef CssOrange fill:#f96,stroke:#333,stroke-width:4px;
    classDef CssRed    fill:#ff0,stroke:#333,stroke-width:4px;
    classDef CssReal    fill:#666,stroke:#333,stroke-width:4px;
    class BrDial,BrHome,BrGfw CssOrange
    class SubVmWin0,SubVmOp1,SubVmOp2,VmSubDial,SubVmService CssGreen
    class SubVmService CssGreen
    class BrGfwPhy,BrHomePhy,BrDialPhy CssRed
    class SubRealDevice CssReal
    class SubPhyRouter CssReal
PVE配置
这里仅仅是基于PVE测试,同样适用于unraid,Exsi等
网络配置
主机后边有两个网口,一个 标记为入(后续描述为网口1),一个标记为出(后续描述为网口2),请直接使用网线连接网口1到家庭的网络。
网络主机分配
这里有如下几种主机
| 主机名字 | IP地址 | 主机号 | 网桥 | 备注 | 
|---|---|---|---|---|
| PVE服务器 | 192.168.1.240(网口1) 192.168.1.241(网口2) | br0 br1 br2 | 一般使用240就可以了,使用浏览器访问:https://192.168.1.240:8006 | |
| 代理机 | 192.168.1.242 | 110 | br0 | win7,可以安装熊猫或者clash,提供代理服务 ( socks5端口号1090, https代理1091) | 
| 网关机1 | 192.168.2.244 | 104 | br1 br2 | OP,任何接入网口出的设备,都能自动科学 | 
| 网关机2 | 192.168.1.243 | 101 | br0 br1 | OP,所有数据流量走网口入,需要手动指定IP地址和网关地址192.168.1.243 | 
| 测试机0 | 106 | br0 | 测试网口入的家庭网络,不科学 | |
| 测试机1 | 107 | br0 | 测试网口入手动设置网关的科学网络 | |
| 测试机2 | 105 | br2 | 测试网口出的自动科学网络 | |
| nps穿透机 | 103 | br0 | 用来远程接入网络,远程调试使用 | |
| win测试机 | auto | 109 | 切换后需要重启 | 调试网络,用来动态接入不同网络进行测试 | 

使用方法
通过网线连接网口入后,开机就可以使用任何一个浏览器访问PVE的web控制页面, 任何想要科学的主机,可以使用如下任意一种方法开启科学模式
模式一
客户机接入到与网口1同级网络,192.168.1.X,并且确保可以访问PVE的web页面,然后手动指定网关到网关机2(192.168.1.243),DNS设置为192.168.1.243或者8.8.8.8
模式二
该模式需要将客户机连接到网络2同级网络(端口不够,可以使用交换机对网络2进行扩展),上网模式设置自动获取
打开任意主机的控制台
这里理解为显示器
win控制台
linux控制台
诊断方法
这里提供了三个测试机,接入不同的网络进行测试
默认网络测试命令:
| 1 | curl http://ifconfig.io/all | 
代理网络测试命令:
| 1 | proxychain4 curl http://ifconfig.io/all | 
该命令会反馈出不同的结果,可以观察结果中的IP和国家信息来判断是否已经科学。

测试机网络归属
| 测试机名字 | 网桥 | 网关 | 科学 | |
|---|---|---|---|---|
| test-gateway-0 | br0 | 192.168.1.1 | 否,仅测试网络 | |
| test-gateway-0+proxychain4 | br0 | 192.168.1.1 | 科学,使用win7 socks代理上网 | |
| test-gateway-1 | br0 | 192.168.1.242 | 是 | |
| test-gateway-2 | br2 | 192.168.2.244 | 是 | 
快照功能
任何一台虚拟机,都可以使用快照功能记录当前虚拟机的设置信息。如果出现问题,可以随时使用快照回滚的功能进行恢复。
创建快照
选择主机-> Snapshots->Take Snapshot
回滚快照
选择主机-> Snapshots->选择回滚的版本-> Rollback
关于备份
主机用了蜗牛的机箱(手边没有其他的。。),所有只有两个最下边的硬盘槽位可以用来引导系统 ,在任意一个槽位插入硬盘,上电确保亮灯应该就可以启动系统。
随机有两个系统盘,内容完全一样,用来作为备份引导盘救急,所以平时只需要插入一个硬盘就可以,另一个硬盘拆下来收藏起来即可(插入槽位就会上电,会影响硬盘寿命)
重置密码
服务器密码重置
- Boot into grub, select single user but do not press enter.
- Press e to go into edit mode.
- Scroll down to the kernel line you will boot from, it starts with “linux /boot/vmlinuz-…….”
- Scroll to the end of that line and press space key once and type init=/bin/bash
- Press Ctrl X to boot1 
 2
 3
 4
 5
 6
 7# Remount / as Read/Write 
 mount -rw -o remount /
 # Change the root account password with
 passwd
 # Change any other account password with
 passwd username
 # type new password, confirm and hit enter and then reboot.
