Help us understand the problem. What is going on with this article?

hostapd 設定 覚書

More than 3 years have passed since last update.

必要な機材

ath5k または ath9k ドライバに対応し、
かつアクセスポイント機能を持った無線 LAN デバイス。

パッケージインストール

apt-get install hostapd iw isc-dhcp-server haveged

ネットワークの構成

/etc/network/interfaces を編集する。

# lo インターフェイスを起動する。
auto lo
# 論理インターフェイス lo を
# IPv4 loopback インターフェイスとして定義する。
iface lo inet loopback

# wlan0 インターフェイスを起動する。
auto wlan0
# 論理インターフェイス wlan0 へ IPv4 固定アドレスを定義する。
iface wlan0 inet static
  address 192.168.0.1
  netmask 255.255.0.0
  gateway 192.168.0.1
  dns-name-servers 8.8.8.8
  wireless-mode master

/etc/NetworkManager/NetworkManager.conf を編集する。

[keyfile]
unmanaged-devices=mac:無線LAN の MAC アドレス

/etc/default/ufw を編集する。

# IPv6 サポートを有効にする。
IPV6=yes

# 外部から入ってくる通信を破棄する。
DEFAULT_INPUT_POLICY="DROP"

# 外部へ出て行く通信の通過を許可する。
DEFAULT_OUTPUT_POLICY="ACCEPT"

# パケット転送を許可する。
DEFAULT_FORWARD_POLICY="ACCEPT"

DEFAULT_APPLICATION_POLICY="SKIP"

# ufw 自身が作成したチェーンのみを操作対象とする。
MANAGE_BUILTINS=no

# iptables のバックエンドとして /etc/ufw/sysctl.conf を使用する。
IPT_SYSCTL=/etc/ufw/sysctl.conf

# 拡張トラッキングモジュールの読込み設定
IPT_MODULES="nf_conntrack_ftp nf_nat_ftp nf_conntrack_netbios_ns"

/etc/ufw/sysctl.conf を編集する。

# パケット転送を有効にする。
net/ipv4/ip_forward=1

# 送信元アドレスの検証を全インターフェイスで有効にし、
# なりすまし攻撃を防止する。
net/ipv4/conf/default/rp_filter=1
net/ipv4/conf/all/rp_filter=1

# IP ソースルートパケットを受信しない。
net/ipv4/conf/default/accept_source_route=0
net/ipv4/conf/all/accept_source_route=0
net/ipv6/conf/default/accept_source_route=0
net/ipv6/conf/all/accept_source_route=0

# ICMP リダイレクトを無効化し、
# MITM 攻撃を防止する。
net/ipv4/conf/default/accept_redirects=0
net/ipv4/conf/all/accept_redirects=0
net/ipv6/conf/default/accept_redirects=0
net/ipv6/conf/all/accept_redirects=0

# 偽の ICMP エラーを無視する。
net/ipv4/icmp_echo_ignore_broadcasts=1
net/ipv4/icmp_ignore_bogus_error_responses=1
net/ipv4/icmp_echo_ignore_all=0

# 有り得ないパケットを記録しない。
net/ipv4/conf/default/log_martians=0
net/ipv4/conf/all/log_martians=0

# TCP / IP SYN クッキーを無効にする。
net/ipv4/tcp_syncookies=0

net/ipv4/tcp_sack=1

/etc/ufw/before.rules を編集する。

# filter テーブルの設定。
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]

# loopback インターフェイスにおける送受信を許可する。
-A ufw-before-input -i lo -j ACCEPT
-A ufw-before-output -o lo -j ACCEPT

# 既存のパケットの受信・送信・転送を許可する。
-A ufw-before-input -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-output -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-forward -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

# 不正なパケットを破棄する。
-A ufw-before-input -m conntrack --ctstate INVALID -j ufw-logging-deny
-A ufw-before-input -m conntrack --ctstate INVALID -j DROP

# 受信における icmp コードを受入れる。
-A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-input -p icmp --icmp-type source-quench -j ACCEPT
-A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT

# 転送における icmp コードを受入れる。
-A ufw-before-forward -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type source-quench -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-forward -p icmp --icmp-type echo-request -j ACCEPT

# dhcp クライアントの動作を許可する。
-A ufw-before-input -p udp --sport 67 --dport 68 -j ACCEPT

-A ufw-before-input -j ufw-not-local
-A ufw-not-local -m addrtype --dst-type LOCAL -j RETURN
-A ufw-not-local -m addrtype --dst-type MULTICAST -j RETURN
-A ufw-not-local -m addrtype --dst-type BROADCAST -j RETURN

# 上記以外の non-local パケットは破棄する。
-A ufw-not-local -m limit --limit 3/min --limit-burst 10 -j ufw-logging-deny
-A ufw-not-local -j DROP

# MULTICAST UPnP のサービス探査を許可する。
-A ufw-before-input -p udp -d 224.0.0.251 --dport 5353 -j ACCEPT
-A ufw-before-input -p udp -d 239.255.255.250 --dport 1900 -j ACCEPT

COMMIT

# nat テーブルの設定。
*nat

# 送信時のアドレス変換を許可する。
:POSTROUTING ACCEPT [0:0]

# パケット転送先のインターフェイスを eth0 とする。
# アドレスを変換する。
-A POSTROUTING -o eth0 -j MASQUERADE

COMMIT

/etc/dhcp/dhcpd.conf を編集する。

# リース確認の際に DNS の更新を試行しない。
ddns-update-style none;

# ネットワーク全体の共通設定。
option domain-name "example.org";
option domain-name-servers 192.168.1.1;

default-lease-time 600;
max-lease-time 7200;

# dhcp ログメッセージを異なるログファイルへ送信する。
log-facility local7;

# サブネットの設定。
subnet 192.168.0.0 netmask 255.255.0.0{
  # 192.168.0.10 から 192.168.0.20 の間で IP アドレスを発行する。
  range 192.168.0.10 192.168.0.20;
  option domain-name-servers 8.8.8.8;
  option routers 192.168.0.1;
  default-lease-time 600;
  max-lease-time 7200;
}

/etc/default/isc-dhcp-server を編集する。

# isc-dhcp-server の設定ファイルとして
# /etc/dhcp/dhcpd.conf を使用する。
DHCPD_CONF=/etc/dhcp/dhcpd.conf

# /var/run/dhcpd.pid を
# isc-dhcp-server の PID ファイルとして使用する。
DHCPD_PID=/var/run/dhcpd.pid

# wlan0 インターフェイスを dhcp サーバとして使用し、
# dhcp リクエストを待ち受ける。
INTERFACES="wlan0"

hostapd の設定

/etc/default/hostapd を編集する。

# /etc/hostapd/hostapd.conf を hostapd の設定ファイルとして使用する。
# hostapd はシステム起動時に起動する。
DAEMON_CONF="/etc/hostapd/hostapd.conf"

# -dd オプションを適用して hostapd を起動する。
# /var/log/syslog へ詳細なログメッセージを出力する。
DAEMON_OPTS="-dd"

/etc/hostapd/hostapd.conf を編集する。
雛形は /usr/share/doc/hostapd/examples/hostapd.conf.gz に収められている。

# wlan0 インターフェイスをアクセスポイントとして使用する。
interface=wlan0

# nl80211 ドライバを使用する。
driver=nl80211

# syslog へ全モジュールのログを記録する。
logger_syslog=-1
# 記録するレベルは informational message までとする。
logger_syslog_level=2

# バックグラウンド動作していない場合に限り、
# 全モジュールのログを stdout へ出力する。
logger_stdout=-1
# 出力するレベルは informational message までとする。
logger_stdout_level=2

# /var/run/hostapd へ UNIX ドメインソケットを作成する。
ctrl_interface=/var/run/hostapd
# gid 0(root) へ制御インターフェイスへの接続を許可する。
ctrl_interface_group=0

# ssid 名。
ssid=任意の ssid 名

# 日本で使用可能な電波出力とチャンネルを使用する。
country_code=JP

# IEEE 802.11d を有効にする。
# country_code を通知し、規制に基づいて
# 電波出力とチャンネルを設定する。
ieee80211d=1

# IEEE 802.11g の帯域を使用する。
hw_mode=g

# チャンネル設定
channel=1

beacon_int=100
dtim_period=2

# 最大 3 台までの端末接続を許可する。
max_num_sta=3

rts_threshold=2347
fragm_threshold=2346

# 接続端末の MAC アドレスに基づく認証を無効にする。
macaddr_acl=0

# 認証アルゴリズムとして Shared Key Authentication を使用する。
auth_algs=1

# 完全な ssid を知らない場合でも接続を許可する。
ignore_broadcast_ssid=0

# wmm パラメータの設定。
wmm_enabled=1
wmm_ac_bk_cwmin=4
wmm_ac_bk_cwmax=10
wmm_ac_bk_aifs=7
wmm_ac_bk_txop_limit=0
wmm_ac_bk_acm=0
wmm_ac_be_aifs=3
wmm_ac_be_cwmin=4
wmm_ac_be_cwmax=10
wmm_ac_be_txop_limit=0
wmm_ac_be_acm=0
wmm_ac_vi_aifs=2
wmm_ac_vi_cwmin=3
wmm_ac_vi_cwmax=4
wmm_ac_vi_txop_limit=94
wmm_ac_vi_acm=0
wmm_ac_vo_aifs=2
wmm_ac_vo_cwmin=2
wmm_ac_vo_cwmax=3
wmm_ac_vo_txop_limit=47
wmm_ac_vo_acm=0

# 送信失敗が頻発するか、何らかの原因で接続が失われると
# 端末の接続解除を実行する。
disassoc_low_ack=1

# HT PHY をサポートしない端末でも接続を許可する。
require_ht=0

eapol_key_index_workaround=0

eap_server=0

# アクセスポイント自身の IP アドレスを 127.0.0.1 とする。
own_ip_addr=127.0.0.1

# WPA2 を使用する。
wpa=2

# 接続認証に使用するパスワード。
wpa_passphrase=任意のパスワード

# 鍵管理アルゴリズムとして WPA-PSK を使用する。
wpa_key_mgmt=WPA-PSK

# RSN / WPA2 の共有鍵暗号化方式として CCMP を使用する。
rsn_pairwise=CCMP

コマンド

sudo lsmod | grep ath

無線 LAN デバイスが ath5k, ath9k に対応しているかどうかを確認する。

iw list

無線 LAN デバイスがサポートしている機能を表示する。

hostapd -d /etc/hostapd/hostapd.conf

設定ファイルをテストする。構成エラーがある場合にはエラーが表示され、
hostapd の実行を中断する。
エラーが無い場合は hostapd が起動され、コンソールへデバッグメッセージが表示される。

service hostapd start

hostapd を起動する。

service hostapd restart

hostapd を再起動する。

service isc-dhcp-server restart

isc-dhcp-server を再起動する。

ufw disable && ufw enable

ufw を再起動する。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした