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

LinuxPCをWiFiアクセスポイントにする

More than 3 years have passed since last update.

短期出張で来た宿泊先に有線LANのネット環境しかなかったので、PCをWiFiアクセスポイントにしたときの手順。
ほぼここの手順のコピーです。情報提供感謝。

環境

構成

PCをWiFiルータとする。WiFiクライアント(スマホ等)は、PC上に立ち上げたアクセスポイントを経由してインターネット接続する。

          有線       WiFi
InternetーーーーーPCーーーーースマホ,タブレット
            eth0  wlan0

PC環境

  • Linux Mint 17.2(Ubuntuなら同じ手順でいけるはず)
  • hostapd 2.1
  • dhcpd 4.2.4

構築

アクセスポイントとしてhostapdを使用する。

hostapdインストール

$ sudo apt-get install hostapd

hostapdの設定

$ sudo vi /etc/hostapd/hostapd.conf

ssidがアクセスポイント名、wpa_passphraseがアクセス時のパスワードになるので各自で設定。
interfaceは大抵はwlan0になるはず。(複数の無線インタフェースを持つようなPCでもない限り)
driverはnl80211で大抵は大丈夫。
その他の項目は必要に応じて変更。

hostapd.conf
#インタフェース名
interface=wlan0
#無線LANアダプタのドライバ
driver=nl80211
#クライアントに表示される無線LANアクセス・ポイント(SSID)名 
ssid=MYAP
hw_mode=g
channel=7
wpa=2 # WPA2
#認証パスワード 
wpa_passphrase=wifipasswd
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP

上記で作成したファイルをhostapdサービス起動時のファイルとして設定。

$ sudo vi /etc/default/hostapd

以下を設定

DAEMON_CONF="/etc/hostapd/hostapd.conf"

NetworkManagerの停止

NetworkManagerが動作しているとhostapd起動時に以下のようなエラーが出て起動できないため停止しておく。

nl80211: Could not configure driver mode
nl80211 driver initialization failed.
hostapd_free_hapd_data: Interface wlan0 wasn't started

Network-Managerを停止し、自動起動も無効にする。

$ sudo stop network-manager
$ echo "manual" | sudo tee /etc/init/network-manager.override

dhcpdのインストール

WiFi接続した機器へのIPアドレス払い出しにdhcpを使用する。

$ sudo apt-get install isc-dhcp-server

dhcpdの設定

$ sudo vi /etc/dhcp/dhcpd.conf

PCの無線LANのIPアドレスを10.0.0.1とし、クライアントに1.0.0.10〜10.0.0.20の範囲でIPアドレスを払い出すよう設定。
8.8.8.8はGoogleパブリックDNSのIPアドレスなのでそのままでOK。

dhcpd.conf
default-lease-time 600;
max-lease-time 7200;
INTERFACES="wlan0";
option domain-name "";
max-lease-time 7200;
log-facility local7;

subnet 10.0.0.0 netmask 255.255.255.0 {
    range 10.0.0.10 10.0.0.20;
    option routers 10.0.0.1;
    option domain-name-servers 8.8.8.8;
}

IPフォワーディングの有効化

$ sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"

実行

iptablesにNAPTのチェインを追加。

iptables -t nat -A POSTROUTING -s 10.0.0.0/255.255.255.0 -o eth0 -j MASQUERADE

PCの無線LAN側インタフェースの起動。dhcpd.confのoption routersに設定したIPアドレスを指定する。

ifconfig wlan0 10.0.0.1 netmask 255.255.255.0 up

dhcpd、hostapdの起動。

service isc-dhcp-server start
service hostapd start

この後スマホ等でWiFiのAPを検索すると、hostapd.confに設定したAP名が出てくる。

毎回コマンド打つのも面倒なのでスクリプト化した。

access_point.sh
#!/bin/bash

INET_IF=eth0
SUBNET=10.0.0.0
NETMASK=255.255.255.0
AP_ADDR=10.0.0.1
WIFI_IF=wlan0

NAT_CHAIN="-s ${SUBNET}/${NETMASK} -o ${INET_IF} -j MASQUERADE"

start() {
    iptables -t nat -A POSTROUTING $NAT_CHAIN
    ifconfig ${WIFI_IF} ${AP_ADDR} netmask ${NETMASK} up

    service isc-dhcp-server start
    if [ $? != 0 ]; then
        echo "failed to start dhcpd."
        return 1
    fi

    service hostapd start
    if [ $? != 0 ]; then
        echo "failed to start hostapd."
        return 1
    fi

    echo "start access-point."
    return 0
}

stop() {
    service hostapd stop
    service isc-dhcp-server stop
    ifconfig ${WIFI_IF} down
    iptables -t nat -D POSTROUTING $NAT_CHAIN

    echo "stop access-point."
    return 0
}

case $1 in
"start" )
    start
    ;;

"stop" )
    stop
    ;;

*)
    echo "usage: $0 start|stop"
    exit 1
esac

アクセスポイント起動

$ sudo access_point.sh start

(事前にスクリプトに実行権を付与しておくこと)

アクセスポイント停止

$ sudo access_point.sh start

(追記)
NetworkManagerを停止すると、Wi-Fi環境に戻ったときにネットワーク接続が出来なくなるので、以下の手順でNetworkManagerの起動を有効化する。

$ sudo rm /etc/init/network-manager.override
$ sudo start network-manager

参考

http://netbuffalo.doorblog.jp/archives/3895783.html
http://maruchan-shiro123.hatenablog.com/entry/2015/04/05/175257

Why do not you register as a user and use Qiita more conveniently?
  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
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