如何使用 CoovaChilli 在 Linux 上安装带强制页面的无线热点如何使用 CoovaChilli 在 Linux 上安装带强制页面的无线热点如何使用 CoovaChilli 在 Linux 上安装带强制页面的无线热点如何使用 CoovaChilli 在 Linux 上安装带强制页面的无线热点
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何使用 CoovaChilli 在 Linux 上安装带强制页面的无线热点

在此页

  1. 先决条件
  2. 安装 CoovaChilli 依赖项
  3. 安装hostapd
  4. 配置hostapd
  5. 自由半径
  6. 配置 freeradius MySQL 表
  7. 安装 Haserl
  8. 安装 CoovaChilli
  9. 配置 CoovaChilli
  10. 测试您的强制门户
  11. 用户管理

本文的目的是演示如何将基于 Linux 的计算机或笔记本电脑变成无线热点,用户可以在其中通过强制门户页面进行身份验证。对于此任务,主控制器软件将是 CoovaChilli。该软件是酒店、餐厅、超市、公园和任何提供 WiFi 上网的场所的理想热点管理解决方案。

先决条件

  • Linux 发行版。在本文中,我将使用 Fedora 20。更高版本 21/22 应该可以正常工作。
  • 源包编译所需的开发库。
  • 有效的 MySQL 服务器安装。
  • 连接到互联网的有线网络设备。
  • 能够运行 sudo 命令。
  • 支持接入点模式的无线网络设备。要查看您的无线设备是否支持 AP 模式,请运行:
    sudo iw phy |grep -A 5 -i Supported interface modes | grep *

安装 CoovaChilli 依赖项

yum install libnl3-devel libtalloc-devel iptables

安装hostapd

Hostapd 允许您的计算机充当接入点 (AP) WPA/WPA2 验证器。其他功能包括 Radius 身份验证服务,但我们不会在此处使用它。

大多数 Linux 发行版(包括 Fedora)都有预先打包的 hostapd 版本,可以使用包管理软件进行安装。例如在 Fedora、CentOS 和其他基于 Red-Hat 的 Linux 发行版中,一个简单的命令将安装这个包:

yum install hostapd

但是,要安装最新版本的 hostpad,我们需要下载并编译源代码。这可以很容易地完成,如下所示:

cd /usr/src
sudo git clone git://w1.fi/hostap.git

这将下载 hostapd 服务器守护程序和 wpa_supplicant 源。我们对前者感兴趣,因此将更改为 hostapd 源:

cd hostap/hostapd

Hostapd 没有配置命令,所以在我们编译 Hostapd 之前,我们需要更改安装前缀。更改默认安装目录的一种快速简单的方法是使用 sed:

sed -i “s:export BINDIR ?= /usr/local/bin/:export BINDIR ?= /usr/sbin:g” Makefile

接下来,复制默认配置文件:

cp -v defconfig .config

我们需要更改配置文件中的一些默认值:

vim .config

取消注释以下选项:

CONFIG_LIBNL32=y # Use libnl 3.2 libraries
CONFIG_IEEE80211N=y # Enables IEEE 802.11n support
CONFIG_WNM=y # Enables Network Management support
CONFIG_IEEE80211AC=y # Enables IEEE 802.11ac support
CONFIG_DEBUG_FILE=y # Support for writing debug log to file

运行制作并安装:

make
sudo make install

要检查 hostapd 是否已正确安装,请运行:

hostapd -v

上面的命令将显示版本和学分

配置hostapd

使用示例文件创建 hostapd 配置文件:

sudo mkdir /etc/hostapd
sudo cp -v /usr/src/hostap/hostapd/hostapd.conf /etc/hostapd/
sudo vim /etc/hostapd/hostapd.conf

在 hostapd.conf 文件中更改以下参数:

driver=nl80211
interface=wlan0 # Change this to your wireless device
ssid=KAMPALA-3 # Change this to your SSID
hw_mode=g
channel=6 # Enter your desired channel
ieee80211n=1 # Enable IEEE 802.11n
wpa=1
wpa_passphrase=myverysecretpassword
wpa_pairwise=TKIP CCMP
rsn_pairwise=CCMP

为 hostapd 套接字创建目录:

sudo mkdir /var/run/hostapd

如果软开关打开,则将 WiFi 接口状态设置为 UP 并解锁 Wifi:

sudo rfkill unblock wifi
sudo ip link set dev wlan0 up

测试并启动 hostapd:

sudo hostapd -d /etc/hostapd/hostapd.conf

如果一切顺利,hostapd 守护进程应该启动而不是退出。

接下来,创建一个 systemd 服务文件。到目前为止,大多数 Linux 发行版都使用 systemd 来控制服务:

sudo vim /etc/systemd/system/hostapd.service
[Unit]
Description=Hostapd IEEE 802.11 AP, IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator
After=dnsmasq.service

[Service]
Type=forking
PIDFile=/var/run/hostapd.pid
ExecStartPre=/bin/mkdir -p /var/run/hostapd
ExecStart=/usr/sbin/hostapd /etc/hostapd/hostapd.conf -P /var/run/hostapd.pid -B

[Install]
WantedBy=multi-user.target

使服务在开机时自动启动:

sudo systemctl enable hostapd.service

自由半径

由于我们会要求客户端在访问 Internet 之前进行身份验证,因此需要安装 radius 服务器。 FreeRadius 是一个基于开源的 radius 服务器。也可以使用您喜欢的 Linux 包管理器(例如 yum 或 apt)安装它。但是既然我们要安装最新的版本,那么我们就从源码编译吧。

下载自由半径:

cd /tmp/
wget -c ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-3.0.9.tar.bz2

解压源并更改安装位置:

sudo tar jxvf freeradius-server-3.0.9.tar.bz2 -C /usr/src/
cd /usr/src/freeradius-server-3.0.9

运行配置脚本,确保您为设置使用正确的前缀和库路径:

sudo ./configure --prefix=/usr --libdir=/usr/lib64 --sysconfdir=/etc --localstatedir=/var/ --enable-fast-install=no

继续编译安装:

sudo make
sudo make install

如果遇到以下错误

mkdir: cannot create directory ‘/etc/raddb/’: File exists
make: *** [/etc/raddb/] 错误 1

运行以下命令来修复它:

rmdir /etc/raddb
make install && make install

添加 radiusd 组和用户:

sudo groupadd -r radiusd
sudo useradd -r -M -c "Radius Server User" -g radiusd radiusd -s /sbin/nologin

配置 freeradius MySQL 表

如果 MySQL 服务器未运行,请启动它。如上所述,初始化过程是通过 systemd 进行的,因此:

sudo systemctl -q is-active mysqld.service || sudo systemctl start mysqld.service

确保服务甚至在启动时启动:

sudo systemctl enable mysqld.service

创建半径数据库:

mysqladmin -u root -p[MYSQL_ROOT_PASSWORD] create radius

使用 MySQL 模式生成数据库表:

sudo cat /etc/raddb/mods-config/sql/main/mysql/schema.sql | mysql -u root -p[MYSQL_ROOT_PASSWORD] radius

创建 MySQL radius 用户并在 radius 数据库上设置权限:

mysql -u root -p[MYSQL_ROOT_PASSWORD] radius

GRANT ALL PRIVILEGES ON radius.* to [FREERADIUS_DB_USER]@localhost IDENTIFIED by '[FREERADIUS_DB_PASS]';

配置 SQL radius 模块:

sudo vim /etc/raddb/mods-available/sql

取消注释或更改以下参数:

driver = "rlm_sql_mysql"
dialect = ”mysql”
server = "localhost"
port = 3306
login = "FREERADIUS_DB_USER"
password = "FREERADIUS_DB_PASS"
read_clients = yes

添加 chillispot SQL 计数器:

sudo vim /etc/raddb/mods-available/sqlcounter

在上述文件末尾添加这一行:

$INCLUDE ${modconfdir}/sql/counter/${modules.sql.dialect}/chillispot.conf

接下来将 sql、sqlcounter 链接到可用的模块:

sudo ln -s /etc/raddb/mods-available/sql /etc/raddb/mods-enabled/sql
sudo ln -s /etc/raddb/mods-available/sqlcounter /etc/raddb/mods-enabled/sqlcounter

配置半径客户端

sudo vim /etc/raddb/clients.conf

将密码更改为上面用于 FreeRadius MySQL 数据库的密码:

secret = [FREERADIUS_DB_PASS]

配置半径服务器:

sudo vim /etc/raddb/radiusd.conf

在安全部分下,将用户和组更改为安装期间创建的名称:

user = radiusd
group = radiusd
allow_vulnerable_openssl = yes
IMPORTANT: Don't do this. You really should update to recent versions of OpenSSL

在实例化部分(近 728 行)下,添加以下计数器模块:

chillispot_max_bytes
noresetcounter

在 sites-available 下配置默认的虚拟服务器:

sudo vim /etc/raddb/sites-available/default

在授权部分:

评论以下内容:

#filter_username

取消注释以下内容:

auth_log
unix


更改以下内容:

'-sql' to sql

在授权部分末尾添加以下内容:

chillispot_max_bytes
noresetcounter

接下来在会计部分下,取消注释以下内容:

radutmp

更改以下内容:

'-sql' to sql

接下来在会话部分下,取消注释以下内容:

radutmp
sql

接下来在授权后部分下,取消注释以下内容:

reply_log

更改以下内容:

'-sql' to sql

在可用站点下配置内部隧道请求虚拟服务器:

sudo vim /etc/raddb/sites-available/inner-tunnel

在授权部分下,更改以下内容:

'-sql' to sql

在授权部分末尾添加以下内容:

chillispot_max_bytes
noresetcounter

接下来在会话部分下,取消注释以下内容:

sql

接下来在授权后部分下,取消注释以下内容:

reply_log

更改以下内容:

'-sql' to sql

为 Chillispot 添加以下 MySQL 计数器:

sudo vim /etc/raddb/mods-config/sql/counter/mysql/chillispot.conf
sqlcounter chillispot_max_bytes {
counter_name = Max-Total-Octets
check_name = ChilliSpot-Max-Total-Octets
reply_name = ChilliSpot-Max-Total-Octets
reply_message = "You have reached your bandwidth limit"
sql_module_instance = sql
key = User-Name
reset = never
query = "SELECT IFNULL((SUM(AcctInputOctets + AcctOutputOctets)),0) FROM radacct WHERE username = '%{${key}}' AND UNIX_TIMESTAMP(AcctStartTime) + AcctSessionTime > '%%b'"
}

更改配置和日志目录的所有权:

sudo touch /var/log/radius/radutmp
sudo chown -R radiusd:radiusd /etc/raddb
sudo chown -R radiusd:radiusd /var/log/radius

在 radius MySQL 数据库中创建管理员用户:

echo "INSERT INTO radcheck (UserName, Attribute, Value, Op) VALUES ('[ADMIN_USER]', 'Cleartext-Password', '[ADMIN_PASSWORD]', ':=');" | mysql -u radius -p[FREERADIUS_DB_PASS] radius

用于初始化和测试目的的起始半径

sudo /usr/sbin/radiusd -X

打开一个新的终端窗口来测试连接:

radtest [ADMIN_USER] [ADMIN_PASSWORD] 127.0.0.1 0 [FREERADIUS_DB_PASS]

如果您收到类似这样的消息,那么您已经完成了后续步骤所需的最小半径设置:

从 127.0.0.1:1812 到 0.0.0.0:0 长度 20 收到访问接受 ID 174

但在离开 radius 之前,为您的 radius 服务器创建一个 systemd 服务文件:

sudo vim /etc/systemd/system/radiusd.service
[Unit]
Description=FreeRADIUS high performance RADIUS server.
After=mysqld.service syslog.target network.target
[Service]
Type=forking
ExecStartPre=-/bin/mkdir /var/log/radius
ExecStartPre=-/bin/mkdir /var/run/radiusd
ExecStartPre=-/bin/chown -R radiusd.radiusd /var/log/radius
ExecStartPre=-/bin/chown -R radiusd.radiusd /var/run/radiusd
ExecStartPre=/usr/sbin/radiusd -C
ExecStart=/usr/sbin/radiusd -d /etc/raddb
ExecReload=/usr/sbin/radiusd -C
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target

使服务在开机时自动启动:

sudo systemctl enable radiusd.service

安装 Haserl

CoovaChilli 中包含的嵌入式微型门户需要 Haserl。

下载哈塞尔:

cd /tmp
wget -c http://superb-dca2.dl.sourceforge.net/project/haserl/haserl-devel/haserl-0.9.35.tar.gz

打包压缩包:

sudo tar zxvf haserl-0.9.35.tar.gz -C /usr/src/
cd /usr/src/haserl-0.9.35/

编译安装:

./configure --prefix=/usr –libdir=/usr/lib64

(确保更改为正确的库或所需的前缀)

make
sudo make install

安装 CoovaChilli

CoovaChilli 是一个基于开源的强制门户软件。它从已弃用的辣椒项目开始。完成 coovachilli 的安装和配置后,您将能够将您的 WiFi 热点客户端重定向到登录页面,即他们可以登录并访问互联网的强制门户。

下载 coovachilli 的最新资源:

cd /usr/src
sudo git clone https://github.com/coova/coova-chilli.git

配置和编译 coova:

cd /usr/src/coova-chilli
sh bootstrap
./configure --prefix=/usr --libdir=/usr/lib64 --localstatedir=/var --sysconfdir=/etc --enable-miniportal --with-openssl --enable-libjson --enable-useragent --enable-sessionstate --enable-sessionid --enable-chilliredir --enable-binstatusfile --enable-statusfile --disable-static --enable-shared --enable-largelimits --enable-proxyvsa --enable-chilliproxy --enable-chilliradsec --with-poll

(确保更改为正确的库或所需的前缀)

make
sudo make install

配置 CoovaChilli

所有配置文件位于:/etc/chilli.您将需要创建一个配置文件,您的网站修改如下:

sudo cp -v /etc/chilli/defaults /etc/chilli/config
sudo vim /etc/chilli/config

更改以下参数以匹配您的环境:

HS_WANIF=eth0 # WAN Interface toward the Internet
HS_LANIF=wlan0 # Subscriber Interface for client devices
HS_NETWORK=10.1.0.0 # HotSpot Network (must include HS_UAMLISTEN)
HS_NETMASK=255.255.255.0 # HotSpot Network Netmask
HS_UAMLISTEN=10.1.0.1 # HotSpot IP Address (on subscriber network)
HS_RADSECRET=[FREERADIUS_DB_PASS] # Set to be your RADIUS shared secret
HS_UAMSECRET=[FREERADIUS_DB_PASS] # Set to be your UAM secret
HS_ADMUSR=[ADMIN_USER]
HS_ADMPWD=[ADMIN_PASSWORD]

添加辣椒 ipup.sh 脚本。这些脚本的目的是准备系统充当路由器。您可能还希望添加其他命令,例如设置网关。

sudo vim /etc/chilli/ipup.sh
#!/bin/sh
#
# Allow IP masquerading through this box
/usr/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

重要提示:将互联网设备更改为正确的设备。

使脚本可执行:

sudo chmod 755 /etc/chilli/ipup.sh

启用 coovachilli 以便它在启动时启动:

sudo systemctl enable chilli

启动coovachilli:

sudo systemctl start chilli

测试您的强制门户

在开始测试之前,请确保您可以先在本地访问互联网。


然后使用智能手机或笔记本电脑等无线客户端,打开您最喜欢的网络浏览器。转到您选择的任何 URL/网站。

如果您按照上述步骤操作,那么您将被重定向到强制门户页面,如下所示:

用户管理

要添加用户以便他们可以使用您的热点访问 Internet,请为每个用户运行以下命令。如果您愿意,可以使用脚本将其自动化。

echo "INSERT INTO radcheck (UserName, Attribute, Value, Op) VALUES ('[LOGIN_NAME]', 'Cleartext-Password', '[LOGIN_PASSWORD]', ':=');" | mysql -u radius -p[FREERADIUS_DB_PASS] radius

就是这样,伙计们!

关注我:@jzikusooka

©2015-2025 艾丽卡 support@alaica.com