From 645deadad4158d6604233b835a1b8597621d707d Mon Sep 17 00:00:00 2001 From: yumoqing Date: Thu, 27 Nov 2025 16:06:50 +0800 Subject: [PATCH] bugfix --- README.md | 120 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 119 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ad678a2..65d9dd3 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,126 @@ # softroute +## 物理机软路由环境 + +### 实现的能力: + + 完整软路由功能: 将一台物理机完全转变为家庭或小型办公室网络的路由器。 + + 内外网隔离: 通过物理双网卡区分内外网,隔离内网与公网。 + + NAT (网络地址转换): 内网主机共享网关的公网 IP 访问外部网络。 + + IP 转发: 允许数据包在内外网接口之间路由。 + + DHCP 服务器: 自动为内网主机分配 IP 地址、网关和 DNS,实现即插即用,内网主机无需手动配置。 + + 智能 DNS 转发 (Dnsmasq + GFWList): 根据域名类型(国内/国外)进行分流解析,国内域名直连,国外域名通过代理解析。 + + 透明 SOCKS5 代理 (Redsocks2 + IPTables + IPSet): 自动识别并重定向所有端口的国外流量到 SOCKS5 代理,实现“国内直连,国外走代理”的无感访问。 + + SOCKS5 代理客户端 (SSH -D): 通过 SSH 连接到远程服务器,建立一个本地 SOCKS5 代理。 + + 防火墙 (IPTables): 完全取代 UFW,通过精细的 iptables 规则实现网络过滤和流量控制。 + + 规则持久化: 配置在重启后依然生效。 + +### 主要操作: + + 硬件准备: 一台至少双网卡的物理机作为网关主机。 + + 网卡连接: + + WAN_INTERFACE 连接到外网 (光猫/上一级路由器)。 + + LAN_INTERFACE 连接到内网交换机,内网主机连接到此交换机。 + + 网关主机运行脚本: + + 修改 render_configs.py 中的 WAN_INTERFACE, LAN_INTERFACE, gateway_lan_ip, dhcp_start_ip, dhcp_end_ip 以及 REMOTE_SSH_USER, REMOTE_SSH_IP 等定制化参数。 + + 运行 python3 render_configs.py 生成 gateway_config.sh。 + + 在网关主机上执行 sudo ./gateway_config.sh。 + + 内网主机操作: + + 无需脚本。 确保内网主机的网卡配置为 DHCP 客户端模式 (Ubuntu 默认),并连接到内网交换机。它们将自动获取 IP、网关和 DNS (指向网关主机的内网 IP)。 + + 测试验证: 在内网主机上检查 IP、网关、DNS 是否正确,并测试内外网访问。 + +## 云服务器软路由环境 + +### 实现的能力: + + 云环境下的软路由功能: 在云主机上实现路由和代理功能。 + + 单网卡路由 (或多网卡私有网关): 通常在单块网卡上同时处理公网和内网流量,或者通过私有网络接口充当内网网关。 + + NAT (网络地址转换): 内网云主机通过网关云主机的公网 IP 访问外部网络。 + + IP 转发: 允许数据包在云主机的不同网络之间(或通过同一接口)路由。 + + 不提供 DHCP 服务器 (依赖云平台): 避免与云平台自带的 DHCP 冲突,内网云主机从云平台获取 IP 和默认网关。 + + 智能 DNS 转发 (Dnsmasq + GFWList): 同物理机环境,根据域名类型分流解析,监听网关云主机的内网 IP。 + + 透明 SOCKS5 代理 (Redsocks2 + IPTables + IPSet): 同物理机环境,自动识别并重定向所有端口的国外流量到 SOCKS5 代理。 + + SOCKS5 代理客户端 (SSH -D): 同物理机环境。 + + 防火墙 (IPTables): 完全取代 UFW,通过精细的 iptables 规则进行流量控制和透明代理。 + + 规则持久化: 配置在重启后依然生效。 + +### 主要操作: + + 云主机准备: + + 一台带有公网 IP 的云主机作为网关云主机。 + + 若干只有内网 IP 的云主机作为内网云主机,它们都位于同一个云平台私有网络 (VPC/VNet) 中,确保可以与网关云主机内网互通。 + + 网卡配置: + + 网关云主机的主网卡 (gateway_main_interface) 保持云平台默认的 DHCP 模式。 + + 内网云主机的主网卡 (client_main_interface) 也保持云平台默认的 DHCP 模式。 + + 网关云主机运行脚本: + + 修改 render_configs.py 中的 gateway_main_interface, internal_network_range (云平台私有网络 IP 范围) 以及 REMOTE_SSH_USER, REMOTE_SSH_IP 等定制化参数。 + + 运行 python3 render_configs.py 生成 gateway_config.sh。 + + 在网关云主机上执行 sudo ./gateway_config.sh。 + + 内网云主机操作 (手动 DNS 配置): + + 无需脚本。 关键是将内网云主机的 DNS 服务器设置为网关云主机的内网 IP。 + + 这可以通过云平台控制台(如果支持)或在内网云主机上手动修改 Netplan 配置文件来实现。 + + 测试验证: 在内网云主机上检查 IP、网关是否正确(由云平台 DHCP 提供),DNS 是否指向网关云主机,并测试内外网访问。 + + 云平台安全组/防火墙配置: 确保安全组或防火墙规则允许内网主机到网关主机的流量,以及网关主机到境外代理服务器的 SSH 流量。 + +## 核心差异总结: +特性 物理机软路由环境 云服务器软路由环境 +网卡数量/类型 至少双网卡 (一外网,一内网) 通常是单网卡(同时承载内外网 IP) +DHCP 服务器 网关主机提供 DHCP 服务 云平台提供 DHCP 服务,网关主机不运行 DHCP +内网主机 IP 从网关主机 DHCP 获取 从云平台 DHCP 获取 +内网主机 DNS 从网关主机 DHCP 获取 (指向网关内网 IP) 需手动/云平台配置为网关云主机的内网 IP +IP 地址规划 完全自定义 (192.168.10.x) 依赖云平台的私有网络 IP 范围 (10.0.0.x 等) +物理隔离 有 (物理网线区分内外网) 无 (单网卡逻辑区分) 或通过云平台虚拟网络功能实现隔离 +外部防火墙 iptables 完全控制 iptables + 云平台安全组/防火墙 共同控制 + +两种方案都实现了你所需的强大智能分流代理功能,但在部署细节和网络环境适配上有所不同。选择哪种取决于你的实际基础设施。 + 如果我是云服务器,一个配置了外网IP,其他主机只有内网ip,上述脚本要怎么修改 -好的,这是一个非常常见的云服务器场景。在这种情况下,你需要对脚本做一些关键的调整,因为云环境的网络接口和 IP 分配方式与物理机有所不同。 +## 云主机技术说明 + +这是一个非常常见的云服务器场景。在这种情况下,你需要对脚本做一些关键的调整,因为云环境的网络接口和 IP 分配方式与物理机有所不同。 核心区别: