Raspberry Piにアクセスポイントを立てる

今後使いそうなので覚え書きメモ

# 今回使用した物
- Raspberry Pi本体
- 最新ではなく`legacy`の方のOS
    - 自分の使ってるモニターでは最新版ではデスクトップ環境が表示されなかったので...
- キーボード
- 適当なモニター

# パッケージのインストール
```bash:
$ sudo apt-get update
$ sudo apt-get install hostapd
$ sudo apt-get install dnsmasq
```

## `hostapd`のインストールが上手くいかない場合
```bash:
# エラー状況の確認
$ systemctl status hostapd.service

● hostapd.service
   Loaded: masked (Reason: Unit hostapd.service is masked.)
   Active: failed (Result: exit-code) since Mon 2022-01-03 11:15:00 GMT; 33s ago

Jan 03 11:15:00 raspberrypi systemd[1]: hostapd.service: Service RestartSec=100ms expired, s
Jan 03 11:15:00 raspberrypi systemd[1]: hostapd.service: Failed to schedule restart job: Uni
Jan 03 11:15:00 raspberrypi systemd[1]: hostapd.service: Failed with result 'exit-code'.

# Active: failedになっていた場合
$ systemctl reset-failed hostapd.service
# これでActive: inactiveになっているかを確認
$ systemctl status hostapd.service

● hostapd.service
   Loaded: masked (Reason: Unit hostapd.service is masked.)
   Active: inactive (dead) since Mon 2022-01-03 11:15:00 GMT; 1min 53s ago

Jan 03 11:15:00 raspberrypi systemd[1]: hostapd.service: Service RestartSec=100ms expired, s
Jan 03 11:15:00 raspberrypi systemd[1]: hostapd.service: Failed to schedule restart job: Uni
Jan 03 11:15:00 raspberrypi systemd[1]: hostapd.service: Failed with result 'exit-code'.

# 一応もう一回apt-get
$ sudo apt-get install hostapd
```

# 環境の確認
`ifconfig`で`wlan0`を確認できればOK

```bash:参考
$ ifconfig

eth0: ~~~~~~~~~~~

lo: ~~~~~~~~~~~~~

wlan0: ~~~~~~~~~~
```

# `create_ap`をインストール
```bash:
$ git clone https://github.com/oblique/create_ap
$ cd create_ap/
$ sudo make install
```

# `create_ap`を実行
SSH接続をしていた場合は一度切り、ラズパイにモニターとキーボードを接続し続行
実行コマンドなどの詳細は下記を参照

https://github.com/oblique/create_ap

```bash:
# これでアクセスポイントが立てられる筈だが...
$ sudo ./create_ap --no-virt -w 2 wlan0 eth0 SSID名 適当なパスワード

# 恐らく下記のエラーが出る(出なければ気にしなくてOK)
WARN: brmfmac driver doesn't work properly with virtual interfaces and
      it can cause kernel panic. For this reason we disallow virtual
      interfaces for your adapter.
      For more info: https://github.com/oblique/create_ap/issues/203
ERROR: Your adapter can not be a station (i.e. be connected) and an AP at the same time'

# 要は貴方のデバイスWi-Fi繋げたままアクセスポイントを立てられませんよとのこと
# なのでWi-Fiを切断し再度実行
# そうすると以下のようなエラーが出る場合がある
RTNETLINK answers: Operation not possible due to RF-kill
# これは無線LANが何故か無効化されてしまっているという事

# 以下で対処可能
$ sudo apt install rfkill
$ sudo nano /etc/rc.local

# `# By default this script does nothing.`以下に追記
/usr/sbin/rfkill unblock wifi

# これで再度実行すれば恐らく他デバイスでアクセスポイントが確認出来る
# 一応それに接続しSSH等出来れば成功
```
ipアドレスとかはどうなってるのだろう?

#### 参考リンク
https://boardtechlog.com/2020/08/programming/raspberry-pi-4-%E3%82%92wifi%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88%E3%81%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/

https://a244.hateblo.jp/entry/2017/12/28/024238

# 追記：`hostapd`を使ったアクセスポイント構築
`WN-G300UA`というWi-Fiアダプターを接続してアクセスポイントを構築しようとしたら、上記の手法では出来なかった。<br>なので`hostapd`単体を使ったアクセスポイントを構築する。

## `hostapd`をインストール

```bash:
$ sudo apt-get install hostapd
# インストール後、一度hostapdを停止する
$ sudo systemctl stop hostapd
```

## 各種設定
まず`/etc/dhcpcd.conf`に以下を記載

```bash:/etc/dhcpcd.conf
denyinterfaces wlan0
interface wlan0
# 192.168.xx.1/24 このxxの部分は取り敢えず現状のWi-Fiルータで使用しているものと被らない様にしておく
# ついでに末尾も.1
static ip_address=192.168.xx.1/24
```

次に`/etc/network/interfaces`を編集

```bash:/etc/network/interfaces
allow-hotplug wlan0
iface wlan0 inet static
# /etc/dhcpcd.confで設定したものと同じに
address 192.168.xx.1
netmask 255.255.255.0
```

`/etc/hostapd/hostapd.conf`を編集

```bash:/etc/hostapd/hostapd.conf
interface=wlan0
driver=nl80211
ssid=好きなSSID
hw_mode=g
channel=6
wmm_enabled=0
macaddr_acl=0
auth_algs=1
wpa=2
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
wpa_passphrase=パスワード
```

`/etc/default/hostapd`を編集

```bash:/etc/default/hostapd
# 中にあるDAEMON_CONF=""のコメントアウトを外して以下を追記
DAEMON_CONF="/etc/hostapd/hostapd.conf"
```

自動で起動出来る様に設定する<br>
`/etc/rc.local`を編集

```bash:/etc/rc.local
# 下の方にある fi exit 0 の間に追記
fi

/etc/init.d/hostapd start 

exit 0
```

## `dnsmasq`をインストール

```bash:
$ sudo apt-get install dnsmasq
# インストール後停止
$ sudo systemctl stop dnsmasq
```

## 各種設定
割り振られるIPアドレスの範囲を設定する。
`/etc/dnsmasq.conf`を編集

```bash:/etc/dnsmasq.conf
interface=wlan0
# /etc/dhcpcd.confで設定したIPを192.168.xx.2, 192.168.xx.好きな範囲で設定
dhcp-range=192.168.xx.2,192.168.xx.好きな範囲,255.255.255.0,24h
```

# システムの起動
恐らく`hostapd`関連でエラーが出るので事前に対処しておく

```bash:
$ sudo systemctl unmask hostapd
$ sudo systemctl enable hostapd
$ sudo systemctl start hostapd
```

`hostapd`と`dnsmasq`を起動

```bash:
$ sudo systemctl start hostapd
$ sudo systemctl start dnsmasq
```

再起動してアクセスポイントが確認出来れば完了

## 参考
完全にこちらを参考にしました

https://monorepi.jp/archives/1793