LoginSignup
32
44

More than 1 year has passed since last update.

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

Last updated at Posted at 2016-09-10

短期出張で来た宿泊先に有線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 stop

(追記)
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

32
44
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
32
44