带有 Web 身份验证的 Ubuntu Wi-fi 热点

She*_*man 7 wireless networking

我正在寻找一种解决方案,以便在我的公司中供客人或访客使用,即像酒店一样的 wi-fi 热点系统。我将使用用户名和密码共享 wi-fi 连接。当用户连接到 wi-fi 系统时,系统将重定向到他们基于 Web 的登录页面以连接网站。

我在谷歌和这里搜索过,但老实说,在我作为一个关于 linux 的菜鸟的文章之后,我的大脑爆炸了:) 大多数人推荐的 live cd 名称是 ZoneCD,但我在互联网上找不到(他们提供的页面是关于屋顶固定 - http://www.publicip.net/features.php - 文章在这里http://www.linuxplanet.com/linuxplanet/reports/7087/2)。

此外,我还发现了一些其他文章,其中说您可以使用开放半径、开放热点附加组件,但老实说,我无法在我的 ubuntu 上安装。

我真的很困惑,决定在这里问,我认为可以在 ubuntu bot 上做到这一点,我们怎么做?以前有人这样做过吗?你能分享一下有关我们如何做到这一点的信息或文章吗?

mch*_*hid 6

第一部分

我遇到了一个 Ubuntu 热点应用程序,它允许您通过 Ubuntu 提供 wifi,所以我希望这对您正在寻找的方面有所帮助。

文章来源在这里http://www.webupd8.org/2013/06/how-to-set-up-wireless-hotspot-access.html

要安装ppa,请执行以下命令

sudo add-apt-repository ppa:nilarimogard/webupd8
sudo apt-get update
sudo apt-get install ap-hotspot
Run Code Online (Sandbox Code Playgroud)

现在,在 14.04 版本中,hostapd 无法正常工作,因此以下命令将降级 hostapd 并使用 apt 来保存包,从而防止自动升级。

对于 64 位

cd /tmp
wget http://archive.ubuntu.com/ubuntu/pool/universe/w/wpa/hostapd_1.0-3ubuntu2.1_amd64.deb
sudo dpkg -i hostapd*.deb
sudo apt-mark hold hostapd
Run Code Online (Sandbox Code Playgroud)

或者,对于 32 位

cd /tmp
wget http://archive.ubuntu.com/ubuntu/pool/universe/w/wpa/hostapd_1.0-3ubuntu2.1_i386.deb
sudo dpkg -i hostapd*.deb
sudo apt-mark hold hostapd
Run Code Online (Sandbox Code Playgroud)

要启动和配置 . . .

sudo ap-hotspot start
Run Code Online (Sandbox Code Playgroud)

安装后要重新配置。. .

sudo ap-hotspot configure
Run Code Online (Sandbox Code Playgroud)

停止热点。. .

sudo ap-hotspot stop
Run Code Online (Sandbox Code Playgroud)

并重新启动。. .

sudo ap-hotspot restart
Run Code Online (Sandbox Code Playgroud)

获取命令列表。. .

ap-hotspot
Run Code Online (Sandbox Code Playgroud)

第二部分基于 Web 的身份验证

改编自http://pepperspot.sourceforge.net/index.php?n=Doc.UserDocumentation

我已经更新了一些命令以符合当前使用 sudo 的做法。

首先安装构建模块

sudo apt-get install build-essential linux-headers-generic automake subversion libtool
Run Code Online (Sandbox Code Playgroud)

下载并构建pepperspot源码包;执行以下命令:

svn co svn://svn.code.sf.net/p/pepperspot/code/trunk pepperspot
cd pepperspot
autoreconf -f -i
./configure
make
sudo make install
sudo modprobe ipv6
sudo apt-get install radvd iptables libc6-dev quagga apache2 libapache2-mod-php5 libssl-dev freeradius
Run Code Online (Sandbox Code Playgroud)

1.) 激活 IPv6

首先,请确保在您的内核上激活了 IPv6。如果将 IPv6 编译为模块,请键入:

sudo modprobe ipv6
Run Code Online (Sandbox Code Playgroud)

1.1) 无状态自动配置

这是/etc/radvd.conf配置文件的示例:

interface ath0  
{
  AdvSendAdvert on;
  AdvIntervalOpt on;
  MinRtrAdvInterval 2;
  MaxRtrAdvInterval 6;
  prefix 2001:db8:1::/64
  {
    AdvOnLink on;
    AdvAutonomous on;
    AdvRouterAddr on;
    };

    RDNSS 2001:db8:2::1 
    {
        AdvRDNSSPreference 8;
    AdvRDNSSOpen off;
    AdvRDNSSLifetime 30;
    };
};
Run Code Online (Sandbox Code Playgroud)

用您自己的值替换接口、前缀和 RDNSS(DNS 服务器信息)行,并使用以下命令启动 radvd:

sudo radvd -C /etc/radvd.conf
Run Code Online (Sandbox Code Playgroud)

1.2) 寻址和路由

强制门户必须将经过身份验证的用户的数据包路由到 Internet。因此系统必须启用 IPv6 转发。您可以通过以下方式打开它:

echo "1" | sudo tee /proc/sys/net/ipv6/conf/all/forwarding
Run Code Online (Sandbox Code Playgroud)

要保持此配置持久,您可以使用以下命令:

echo 'net.ipv6.conf.all.forwarding=1' | sudo tee -a /etc/sysctl.conf
Run Code Online (Sandbox Code Playgroud)

IPv6 转发将禁用 IPv6 自动配置,因此可以使用路由守护程序静态或动态设置网络配置(分配地址和路由)。对于最后一个过程,请查看第 2 节。

如果要使用静态寻址和路由过程,假设 eth0 是连接到 IPv6 网络到 Internet 的接口,请键入以下命令并替换为您自己的值。

在有线接口上分配地址:

sudo ip -6 addr add 2001:db8:1::1234/64 dev eth0
Run Code Online (Sandbox Code Playgroud)

添加默认路由配置(替换为您的路由地址值):

sudo route -A inet6 add default gw fe80::1:2:3:4 dev eth0
Run Code Online (Sandbox Code Playgroud)

您可以将此配置持久化,在您的/etc/network/intefaces 中插入网络配置,如本示例所示:

auto eth0
iface eth0 inet6 static
        address 2001:db8:1::1234
        netmask 64
                gateway fe80::1:2:3:4
        pre-up modprobe ipv6      # to be sure that ipv6 is enabled before we turn up the interface 
Run Code Online (Sandbox Code Playgroud)

请注意,您不必在连接到接入点盒的接口(或无线接口,如果使用的话)上配置地址。

1.3) IPv4

IPv4 配置与 IPv6 或多或少相同,只是您不需要为网络配置通告客户端。PepperSpot 集成了一个 DHCP 模块来为远程客户端分配一个 IPv4 地址。如果无线链路已经有一个 DHCP 服务器,或者如果客户端配置是静态设置的,您可以在 PepperSpot 配置中禁用此模块。尽管如此,您仍需要配置链接到 IPv4 网络的接口。

同样,使用以下命令启用 IPv4 转发:

echo "1" | sudo tee /proc/sys/net/ipv4/conf/all/forwarding
echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf
Run Code Online (Sandbox Code Playgroud)

并配置接口地址和路由(替换为您的参数):

sudo ip addr add 192.168.0.1/24 dev eth1
sudo route add default gw 192.168.0.254 dev eth1
Run Code Online (Sandbox Code Playgroud)

您可以使用以下块命令来更新您的 /etc/network/interfaces 文件:

echo 'auto eth1
iface eth1 inet static
    address 192.168.0.1
    netmask 24
    gateway 192.168.0.254' | sudo tee /etc/network/interfaces
Run Code Online (Sandbox Code Playgroud)

1.4) 网络过滤器支持

PepperSpot 将使用一些 Netfilter 的规则来进行客户端和 Internet 之间的通信。所以系统必须支持Netfilter。如果不是这种情况,请修改内核的配置:

对于 IPv4,您需要启用 Nat、Mangle 和跟踪支持;

对于 IPv6,您只需要基本支持。

1.5) 注释

所有服务(Radius、Web 服务器、PepperSpot 等)都可以安装在提供 Wi-Fi 访问(主模式)的系统上。它可以是嵌入式设备,也可以是从头开始配置为接入点的系统。

对于这种情况,您的 Wi-Fi 卡必须支持 Master 模式。

例如,如果您使用带有 madwifi 驱动程序的无线接口,这里是一个示例初始化脚本:

#!/bin/bash

# Setting ath0 in Master mode
# Replace PepperSpot by your SSID

wlanconfig ath0 destroy
wlanconfig ath0 create wlandev wifi0 wlanmode ap
iwconfig ath0 essid "PepperSpot"    
ifconfig ath0 up
Run Code Online (Sandbox Code Playgroud)

2)配置Quagga路由套件

Quagga 路由套件实现了一些 IPv4 和 IPv6 路由协议。本节介绍安装 RIPng 协议以允许 IPv6 路由。我们假设您有一个委派的 IPv6 前缀,并且您需要为此前缀路由通信。如果不是这种情况,您可以跳过本节。

quagga 的配置是通过在/etc/quagga目录中设置一些配置文件来完成的,但是 quagga 套件为每个协议集成了一些类似于 cisco 的接口,以允许动态配置并查看一些路由信息,如路由表。

您可以将之前描述的 IPv6 和 IPv4 网络配置放在路由协议配置中。对于您想要的每个协议,请在/etc/quagga/daemon 中启用它。

我们需要启用zebra,因为它是使用其他协议和配置接口所需的主要路由模块。在我们的例子中,我们也只需要添加 RIPng:

# This file tells the quagga package which daemons to start.
#
# Entries are in the format: <daemon>=(yes|no|priority)
#   0, "no"  = disabled
#   1, "yes" = highest priority
#   2 .. 10  = lower priorities
# Read /usr/share/doc/quagga/README.Debian for details.
#
# Sample configurations for these daemons can be found in
# /usr/share/doc/quagga/examples/.
#
# ATTENTION:
#
# When activation a daemon at the first time, a config file, even if it is
# empty, has to be present *and* be owned by the user and group "quagga", else
# the daemon will not be started by /etc/init.d/quagga. The permissions should
# be u=rw,g=r,o=.
# When using "vtysh" such a config file is also needed. It should be owned by
# group "quaggavty" and set to ug=rw,o= though. Check /etc/pam.d/quagga, too.
#
zebra=yes
bgpd=no
ospfd=no
ospf6d=no
ripd=no
ripngd=yes
isisd=no
Run Code Online (Sandbox Code Playgroud)

现在我们必须为每个启动的守护进程创建一个配置文件。

/etc/quagga/zebra.conf文件:

!
! Zebra configuration saved from vty
!   2008/04/10 12:18:58
!
hostname MobSpot
password ***********
enable password *************
!
interface ath0
 ipv6 nd suppress-ra
!
interface eth0
 ipv6 address 2001:db8:1::1234/64
 ipv6 nd suppress-ra
!
interface eth1
 ip address 192.168.0.1/24
 ipv6 nd suppress-ra
!
interface eth2
 ipv6 nd suppress-ra
!
interface eth3
 ipv6 nd suppress-ra
!
interface lo
!
interface tun0
 ipv6 nd suppress-ra
!
interface wifi0
 ipv6 nd suppress-ra
!
ipv6 forwarding
!
!
line vty
!
Run Code Online (Sandbox Code Playgroud)

在这个文件中,我们设置了链接到服务网络(eth0 和 eth1)的每个接口的静态配置。

/etc/quagga/ripngd.conf文件:

! -*- rip -*-
!
! RIPngd sample configuration file
!
! $Id: ripngd.conf.sample,v 1.1.1.1 2002/12/13 20:15:30 paul Exp $
!
hostname MobSpot
password ***********
enable password ************
!
! debug ripng events
! debug ripng packet
!
!
router ripng
network eth0
redistribute connected
redistribute static
route 2001:db8:1::/64
!
line vty
!
Run Code Online (Sandbox Code Playgroud)

在这个文件中,我们配置了 RIPng 协议,表明我们能够在 eth0 接口上路由 2001:db8:1::/64 前缀的数据包。

对于这两个文件,第一部分将定义配置接口 (vty) 的密码。启用密码行表示需要密码才能获得重新配置守护程序的权限。不要忘记 line vty line 来启用这个配置界面。

对于斑马配置类型:

sudo telnet 127.0.0.1 zebra
Run Code Online (Sandbox Code Playgroud)

对于 RIPng 配置:

sudo telnet 127.0.0.1 ripngd
Run Code Online (Sandbox Code Playgroud)

注意:认证后(将密码行重新设计到配置文件中),您将获得一个命令行来配置守护程序。类型 ”?” 查看可用命令。

最后,重启 quagga 守护进程:

sudo /etc/init.d/quagga restart 
Run Code Online (Sandbox Code Playgroud)

注意:如果您需要配置 IPv4 路由,请将此配置调整为 RIP 守护程序。

3)Apache配置

PepperSpot 需要与安装在同一台机器上的 Web 服务器通信,以允许客户端进行身份验证。必须为 SSL、PHP 和 CGI​​ 配置 Web 服务器。

这是 Apache2 Web 服务器的配置:

生成 SSL 证书以保证 Web 服务器的身份:

sudo make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/key.pem
Run Code Online (Sandbox Code Playgroud)

第二步是加载Apache2-SSL模块:

sudo a2enmod ssl
Run Code Online (Sandbox Code Playgroud)

Web 服务器需要一个虚拟主机才能访问。使用以下内容创建文件/etc/apache2/sites-available/pepperspot(适应您需要的配置):

NameVirtualHost *:443

<VirtualHost *:443>
        ServerAdmin webmaster@pepperspot
        SSLEngine on
        SSLCertificateFile /etc/apache2/key.pem

        DocumentRoot /var/www/
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
                    # This directive allows us to have apache2s default start page
                    # in /apache2-default/, but still have / go to the right place
                RedirectMatch ^/$ /apache2-default/
        </Directory>

            # CGI - We need cgi support to communicate with PepperSpot
        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>
</VirtualHost>'
Run Code Online (Sandbox Code Playgroud)

如果要修改虚拟主机的名称,请不要忘记 Apache 需要侦听双栈模式的 IPv6 和 IPv4 地址,以及有关您将选择的单模式的 IPv4 或 IPv6 接口。

添加 /etc/apache2/ports.conf 以允许使用以下块代码进行 HTTPS 侦听(如果尚未存在):

echo '<IfModule mod_ssl.c>
    Listen 443
</IfModule>' | sudo tee -a /etc/apache2/ports.conf
Run Code Online (Sandbox Code Playgroud)

最后,加载站点:

sudo a2ensite pepperspot
sudo /etc/init.d/apache2 reload
Run Code Online (Sandbox Code Playgroud)

4) FreeRadius 配置

PepperSpot 能够通过 IPv4 或 IPv6 协议与 Radius 服务器通信,关于 /etc/pepper.conf 中的 Radius 服务器地址配置。这里是 FreeRadius Server 的配置。要获得 IPv6 支持,您需要一个版本的 FreeRadius >= 2.0。

FreeRadius 配置比较复杂,下面仅介绍在 FreeRadius 上启用 IPv6 支持的基本配置,以及添加一些用户帐户的简单方法。如果您想要更好的配置,请参阅 FreeRadius 文档。

4.1) IPv6 配置

修改 /etc/freeradius/radiusd.conf 文件以添加以下部分:

# For authentication 
listen {
        type = auth
#       ipaddr = *
        ipv6addr = ::1
        port = 0
#       interface = eth0
#       clients = per_socket_clients
}

# For accounting                         
listen {
        type = acct
#       ipaddr = *
        ipv6addr = ::1
        port = 0
#       interface = eth0
#       clients = per_socket_clients
}
Run Code Online (Sandbox Code Playgroud)

使用此配置,将字段 ipv6addr 的 ::1 替换为 FreeRadius 必须侦听的地址。port = 0 表示使用默认 Radius 端口。如果您为 ipv6addr 指定 *,FreeRadius 将侦听系统上配置的每个 IPv6 地址。

现在,您需要配置一个 FreeRadius 客户端(称为 NAS),通常 NAS 是强制门户。

打开 /etc/freeradius/clients.conf 文件并添加以下几行:

client ::1 {      # here ::1 is the name of the client. Replace with your own value
    ipv6addr    = ::1
    secret  = testing123
    shortname   = localhost
    nastype     = other
}
Run Code Online (Sandbox Code Playgroud)

如果 PepperSpot 和 FreeRadius 在不同的盒子上,ipv6addr 必须替换为 PepperSpot 和 FreeRadius 通信的地址。也修改短名称。

重新启动 FreeRadius:

sudo /etc/init.d/freeradius restart
Run Code Online (Sandbox Code Playgroud)

4.2) IPv4 配置

对于 FreeRadius 的 IPv4 配置,将 ipv6addr 字段替换为 ipaddr,并填写所需的 IPv4 地址。

4.3) 账户

最后,我们需要在 /etc/freeradius/users 中创建帐户:

toto 明文密码 := "totoilsaitpas"

ping6 明文密码:=“pong6”

重启 FreeRadius:

sudo /etc/init.d/freeradius restart
Run Code Online (Sandbox Code Playgroud)

5) PepperSpot 配置

复制一些配置文件:

sudo cp doc/pepper.conf /etc/
sudo cp doc/hotspotlogin.cgi /usr/lib/cgi-bin/
sudo chmod +x /usr/lib/cgi-bin/hotspotlogin.cgi
Run Code Online (Sandbox Code Playgroud)

对于 IPv4:

sudo cp doc/pepper.iptables /etc/
sudo chmod +x /etc/pepper.iptables
Run Code Online (Sandbox Code Playgroud)

对于 IPv6:

sudo cp doc/pepper.ip6tables /etc/
sudo chmod +x /etc/pepper.ip6tables
Run Code Online (Sandbox Code Playgroud)

5.2) iptables

修改 /etc/pepper.iptables 和/或 /etc/pepper.ip6tables 脚本并调整 $INTIF(连接到接入点或无线接口的接口)、$EXTIF4(连接到 IPv4 LAN 的接口)和 $EXTIF6(连接到 IPv4 LAN 的接口)连接到 IPv6 LAN)与您的配置相关的值。请注意,对于双堆栈配置,$EXTIF4 和 $EXTIF6 可以具有相同的值。

您可以按照 Pepperspot 用户文档中的其余设置进行操作。http://pepperspot.sourceforge.net/index.php?n=Doc.UserDocumentation只剩下一个配置部分了。