Project Icon

linux-router

Linux系统一键配置路由和WiFi热点工具

Linux-router是一个开源工具,用于将Linux系统快速配置为路由器或WiFi热点。它支持互联网连接共享、子网创建、DHCP和DNS服务、IPv6以及透明代理等功能。用户通过单个命令即可完成设置,也可轻松还原配置。该工具适用于虚拟机/容器路由、创建隔离网络等场景,通过封装iptables和dnsmasq等底层组件简化了复杂的网络配置过程。

Linux 路由器

一条命令将 Linux 设置为路由器。能够提供互联网连接或创建 WiFi 热点。支持透明代理(redsocks)。同时也适用于虚拟机/容器的路由。

它封装了 iptablesdnsmasq 等工具。一条命令使用,一条命令还原或通过 control-c 恢复(甚至关闭终端窗口即可恢复)。

Linux-Router 新闻 & 开发者笔记 📰 | 更多工具和项目 🛠️ | 🍻 请我喝杯咖啡 ❤️

功能

基本功能:

  • 创建一个 NAT 子网
  • 提供互联网连接
  • DHCP 服务器(和 RA)
    • 指定 DHCP 服务器分配给客户端的 DNS
  • DNS 服务器
    • 指定上游 DNS (类似简单的 DNS 代理)
  • IPv6 (在 NAT 局域网后,类似 IPv4)
  • 创建 WiFi 热点:
    • 选择信道
    • 选择加密方式: WPA2/WPA、WPA2、WPA、无加密
    • 在获取互联网的同一接口上创建 AP (通常需要相同信道)
  • 透明代理 (redsocks)
  • 透明 DNS 代理 (劫持 53 端口数据包)
  • 检测 NetworkManager 并确保不会干扰 (处理接口(非)托管状态)
  • 检测 firewalld 并确保不会干扰 (通过使用 trusted 区域)
  • 可以运行多个实例,创建多个不同的网络。具有实例管理功能。

更多功能请参见下方命令行用法

适用场景

互联网----(eth0/wlan0)-Linux-(wlanX)AP
                                       |--客户端
                                       |--客户端
                                    互联网
WiFi AP(无DHCP)                         |
    |----(wlan1)-Linux-(eth0/wlan0)------
    |           (DHCP)
    |--客户端
    |--客户端
                                    互联网
 交换机                                 |
    |---(eth1)-Linux-(eth0/wlan0)--------
    |--客户端
    |--客户端
互联网----(eth0/wlan0)-Linux-(eth1)------另一台PC
互联网----(eth0/wlan0)-Linux-(虚拟接口)-----虚拟机/容器

安装

单文件脚本。在 GitHub 上的 Linux-router 仓库发布。只需下载并运行 bash 脚本(满足依赖)。这种情况下无需安装即可使用。

我目前没有为任何发行版打包。如果你打包了,欢迎提交 PR 并在此处添加链接(可以带版本徽章)

Linux 发行版
任意下载单文件脚本并无需安装即可运行

依赖

  • bash
  • procps 或 procps-ng
  • iproute2
  • dnsmasq
  • iptables (或带 iptables-nft 转换链接的 nftables)
  • WiFi 热点依赖
    • hostapd
    • iw
    • iwconfig (仅当 'iw' 无法识别你的适配器时需要)
    • haveged (可选)

用法

为一个接口提供互联网

sudo lnxrouter -i eth1

无论你从哪个接口(除了 eth1)获取互联网。

创建 WiFi 热点

sudo lnxrouter --ap wlan0 MyAccessPoint -p MyPassPhrase

无论你从哪个接口获取互联网(即使是 wlan0)。将为热点创建虚拟接口 x0wlan0

将一个接口的互联网提供给另一个接口

客户端只通过 isp5 访问互联网

sudo lnxrouter -i eth1 -o isp5  --no-dns  --dhcp-dns 1.1.1.1  -6 --dhcp-dns6 [2606:4700:4700::1111]

在这种用法下,建议:

  1. 停止提供本地 DNS
  2. 告诉客户端使用哪个 DNS (ISP5 的 DNS。或者,安全的公共 DNS,如上例所示)

创建局域网而不提供互联网

sudo lnxrouter -n -i eth1
sudo lnxrouter -n --ap wlan0 MyAccessPoint -p MyPassPhrase

为 LXC 提供互联网

创建一个桥接

sudo brctl addbr lxcbr5

在 LXC 容器的 config

lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = lxcbr5
lxc.network.hwaddr = xx:xx:xx:xx:xx:xx
sudo lnxrouter -i lxcbr5

透明代理

所有客户端的互联网流量都通过,例如,Tor(注意此例并非匿名用途)

sudo lnxrouter -i eth1 --tp 9040 --dns 9053 -g 192.168.55.1 -6 --p6 fd00:5:6:7::

torrc

TransPort 192.168.55.1:9040 
DNSPort 192.168.55.1:9053
TransPort [fd00:5:6:7::1]:9040 
DNSPort [fd00:5:6:7::1]:9053

警告: Tor 的匿名性依赖于专门设计的浏览器。像这样使用 Tor(将 Tor 网络共享给局域网客户端)不能确保匿名性。

尽管我们在这里使用 Tor 作为示例,但 Linux-router 并不确保也不以匿名性为目标。

客户端沙盒网络

不向客户端提供我们的信息。客户端仍可访问互联网。

sudo lnxrouter -i eth1 \
    --tp 9040 --dns 9053 \
    --random-mac \
    --ban-priv \
    --catch-dns --log-dns   # 可选

Linux-router 不提供任何保证。使用风险自负

用作 LXD 的透明代理

创建一个桥接

sudo brctl addbr lxdbr5

创建并添加一个新的 LXD 配置文件来覆盖容器的 eth0

lxc profile create profile5
lxc profile edit profile5

### 配置文件内容 ###
config: {}
description: ""
devices:
  eth0:
    name: eth0
    nictype: bridged
    parent: lxdbr5
    type: nic
name: profile5

lxc profile add <容器名> profile5
sudo lnxrouter -i lxdbr5 --tp 9040 --dns 9053

从容器中移除新配置文件

lxc profile remove <容器名> profile5

不使用配置文件

向容器添加新的 eth0,覆盖默认的 eth0

lxc config device add <容器名> eth0 nic name=eth0 nictype=bridged parent=lxdbr5

移除自定义的 eth0 以恢复默认的 eth0

lxc config device remove <容器名> eth0

用作 VirtualBox 的透明代理

在 VirtualBox 的全局设置中,创建一个禁用 DHCP 的仅主机网络 vboxnet5

sudo lnxrouter -i vboxnet5 --tp 9040 --dns 9053

用作 firejail 的透明代理

创建一个网桥

sudo brctl addbr firejail5
sudo lnxrouter -i firejail5 -g 192.168.55.1 --tp 9040 --dns 9053 
firejail --net=firejail5 --dns=192.168.55.1 --blacklist=/var/run/nscd

Firejail 的 /etc/resolv.conf 不会从 DHCP 获取 DNS,所以我们需要手动分配。

nscd 是域名缓存服务,在这里不应该从 jail 内访问。

命令行用法和其他功能

用法: lnxrouter <选项>

选项:
    -h, --help              显示此帮助信息
    --version               打印版本号

    -i <接口>               指定用于创建 NAT 子网并提供互联网的接口
                            (创建 WiFi 热点请使用 '--ap' 选项)
    -o <接口>               指定提供互联网的接口
                            (注意:使用此选项和默认 DNS 选项可能会将查询泄露到其他接口)
    -n                      不提供互联网
    --ban-priv              禁止客户端访问我的私有网络
    
    -g <ip>                 此主机在子网中的 IPv4 地址(子网掩码为 /24)
                            (例如: '192.168.5.1' 或简写为 '5')
    -6                      启用 IPv6 (NAT)
    --no4                   禁用 IPv4 互联网(不转发 IPv4)
                            通常与 '-6' 一起使用
                            
    --p6 <前缀>             设置 IPv6 LAN 地址前缀(长度为 64)
                            (例如: 'fd00:0:0:5::' 或简写为 '5') 
                            使用此选项会启用 '-6'
                            
    --dns <ip>|<端口>|<ip:端口>
                            DNS 服务器的上游 DNS
                            使用 ',' 分隔多个服务器
                            (默认: 使用 /etc/resolv.conf)
                            (注意 IPv6 地址需要用 '[]' 括起来)
    --no-dns                不提供 DNS 服务
    --no-dnsmasq            禁用 dnsmasq 服务器 (DHCP, DNS, RA)
    --catch-dns             透明 DNS 代理,将目标端口为 53 的数据包(TCP/UDP)
                            重定向到此主机
    --log-dns               显示 DNS 查询日志 (dnsmasq)
    --dhcp-dns <IP1[,IP2]>|no
                            设置 DHCP 提供的 IPv4 DNS(默认:此主机)
    --dhcp-dns6 <IP1[,IP2]>|no
                            设置 DHCP (RA) 提供的 IPv6 DNS
                            (默认: 此主机)
                            (注意 IPv6 地址需要用 '[]' 括起来)
                            同时使用以上两个选项将启用 '--no-dns' 
    --hostname <名称>       DNS 服务器将此名称与此主机关联
                            使用 '-' 从 /etc/hostname 读取名称
    -d                      DNS 服务器将考虑 /etc/hosts 文件
    -e <hosts 文件>         DNS 服务器将考虑额外的 hosts 文件
    --dns-nocache           DNS 服务器不使用缓存
    
    --mac <MAC>             设置 MAC 地址
    --random-mac            使用随机 MAC 地址
 
    --tp <端口>             透明代理,
                            将非 LAN 的 TCP 和 UDP(未经测试)流量重定向到
                            指定端口(通常与 '--dns' 一起使用)
    
  WiFi 热点选项:
    --ap <WiFi 接口> <SSID>
                            创建 WiFi 接入点
    -p, --password <密码>   
                            WiFi 密码
    --qr                    在终端显示 WiFi 二维码(需要 qrencode)
    
    --hidden                隐藏接入点(不广播 SSID)
    --no-virt               不创建虚拟接口
                            使用此选项后,无法同时使用同一个 wlan 接口
                            提供互联网和创建 AP
    --virt-name <名称>      设置虚拟接口的名称
    -c <信道>               指定信道(默认:使用当前信道,或 1 / 36)
    --country <代码>        设置两字母国家代码以符合规定
                            (例如: US)
    --freq-band <GHz>       设置频段: 2.4 或 5 (默认: 2.4)
    --driver                选择 WiFi 适配器驱动程序(默认: nl80211)
    -w <WPA 版本>           '2' 表示 WPA2,'1' 表示 WPA,'1+2' 表示两者都支持
                            (默认: 2)
    --psk                   使用 64 位十六进制预共享密钥,而不是密码短语
    --mac-filter            启用 WiFi 热点 MAC 地址过滤
    --mac-filter-accept     WiFi 热点 MAC 地址过滤列表的位置
                            (默认为 /etc/hostapd/hostapd.accept)
    --hostapd-debug <级别>  1 或 2。传递 -d 或 -dd 给 hostapd
    --isolate-clients       禁用客户端之间的 WiFi 通信
    --no-haveged            在需要时不自动运行 haveged
    --hs20                  启用 Hotspot 2.0

    WiFi 4 (802.11n) 配置:
    --wifi4                 启用 IEEE 802.11n (HT)
    --req-ht                要求站点 HT(高吞吐量)模式
    --ht-capab <HT 能力>    HT 能力(默认: [HT40+])

WiFi 5 (802.11ac) 配置: --wifi5 启用 IEEE 802.11ac (VHT) --req-vht 要求站点使用 VHT (Very High Throughput) 模式 --vht-capab <VHT 能力> VHT 能力

--vht-ch-width <索引>   VHT 信道宽度索引:
                            0 表示 20MHz 或 40MHz (默认)
                            1 表示 80MHz
                            2 表示 160MHz
                            3 表示 80+80MHz (非连续 160MHz)    
--vht-seg0-ch <信道>    主要段 VHT 中心频率的信道索引。
                        与 '--vht-ch-width' 一起使用
--vht-seg1-ch <信道>    次要段(第二个 80MHz)VHT 中心频率的信道索引。
                        与 '--vht-ch-width 3' 一起使用

实例管理: --daemon 在后台运行 -l, --list-running 显示正在运行的实例 --lc, --list-clients <id|接口>
列出一个实例的客户端。或列出一个接口的邻居, 即使该接口不由我们处理(被动模式) --stop 停止一个正在运行的实例 可以使用 PID 或子网接口名称。 可以通过 '--list-running' 获取它们

示例: lnxrouter -i eth1 lnxrouter --ap wlan0 MyAccessPoint -p MyPassPhrase lnxrouter -i eth1 --tp <透明代理> --dns <DNS代理>

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号