使用hostapd在linux上建立自己的WLAN-AP

系統版本

基本上為linux至於使用哪個版本的都可以

其他版本可能指令略為不同或需多修改防火牆設定

這裡示範使用為linux ubuntu 16.0.4 LTS

安裝步驟

下面指令遇到權限不足切換ROOT 的問題請自行提權

提權方法(擇一使用就好):
(1)sudo su
(2)sudo <指令>

  1. 安裝hostapd

apt-get install hostapd

  1. 設置 hostapd.conf

vim /etc/hostapd/hostapd.conf

1
2
3
4
5
6
7
8
interface=wlp8s0                  //網卡接口名稱,用ifconfig獲得
driver=nl80211`
ssid=My_WiFi //wifi名稱
channel=10`
hw_mode=g`
macaddr_acl=0 //mac設備過濾
auth_algs=1`
ignore_broadcast_ssid=0
  1. 安裝isc-dhcp-server

apt-get install isc-dhcp-server

  1. 設置isc-dhcp-server指定網卡為wlp8s0

vim /etc/default/isc-dhcp-server

找到下列這段並修改成

INTERFACES="wlp8s0"

  1. 設置dhcpd.conf修改DNS跟分配的網段

vim /etc/dhcp/dhcpd.conf

打開後找到

1
2
3
4
5
6
7
8
9
10
11
12
option domain-name "example.org"; # 網域名稱
option domain-name-servers 8.8.8.8, 1.1.1.1; # DNS Server

default-lease-time 600; # 預設租賃時間
max-lease-time 7200; # 最大租賃時間


subnet 192.168.100.0 netmask 255.255.255.0 {
range 192.168.100.2 10.121.210.254;
option subnet-mask 255.255.255.0;
option routers 192.168.100.1;
}
  1. 安裝iptables(如用其他版本的linux可不裝,如:centOS)

apt-get install iptables

  1. 配置網卡IP

ifconfig wlp8s0 192.168.100.1 netmask 255.255.255.0 up

  1. 啟動DHCP server

/etc/init.d/isc-dhcp-server start > /etc/init.d/isc-dhcp-server restart重啟DHCP server

  1. 開啟轉發功能

sysctl -w net.ipv4.ip_forward=1

1
2
3
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE  
iptables -A FORWARD -i wlp8s0 -j ACCEPT
iptables -A FORWARD -o wlp8s0 -j ACCEPT
  1. 啟動AP

hostapd -B /etc/hostapd/hostapd.conf

到這裡基本上就完成了AP架設,但此方法並未設定wifi密碼

因為此篇主要還要實作認證頁面,所以並未設wifi密碼。

認證網頁

webserver 建置以及權限設置問題方法(略)

前端網頁:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>網路認證頁面</title>

</head>
<body>

<form method="POST" action="auth.php">
<p align="center">
<b>Authentication Page</br>

<label class="label_input">使用者名稱</label><input type="text" NAME="username" class="text_field"/>
<br>
<label class="label_input">密碼</label><input type="text" NAME="password" class="text_field"/>
<br>
<input type="submit" NAME="submit" value="登入" />
<br>

</p>

</form>

</body>
</html>

後端網頁:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$user = "abc";
$pass = "abc";
echo '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">';
function login(){
if($user == $_POST['username'] && $pass == $_POST['password']){
echo "<b>Authentication Page</br>";
echo "Authentication success and allow to use this wifi";
echo exec ('sudo iptables -t nat -D PREROUTING -i wlp8s0 -p tcp -s 192.168.100.0/24 -j DNAT --to 192.168.100.1',$out1,$return1);
header("Location: https://www.google.com");
}else{
echo "<font size=20> Authentication Failure</font><br>";
header("Location: 192.168.100.1");
}
}
login();


?>
  1. 網頁建置完後,再輸入這行指令
    iptables -t nat -A PREROUTING -i wlp8s0 -p tcp -s 192.168.100.0/24 -j DNAT --to-destination 92.168.100.1
    這樣有認證網頁功能的wifi就建置完成了。

這認證網頁只有一次性的效果