Edited at

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