Orange Pi PC ETV8188EU AP+STA Mode

Orange Pi PCとRealtek製WiFi-USBドングルRTL8188ETV(EU)によるルータとしての利用方法を纏めました。RTL8188ETVは安価なWiFiモジュールですが、2つの独立したインターフェイスによりAP(アクセスポイント)モードとSTA(クライアント)モードを併用して利用することができます。NATとiptablesにより、これら2つの独立したインターフェイス間を橋渡しすることでハードにルータとしての機能を持たせることができます。他のWiFiドングルでもiw list
コマンドにより出力されるSupported interface modes
の項目に”AP”
が含まれていれば同様に設定することでルータとしての活用ができる筈です。
■ 対象ハードとOS
Orange Pi PC: ARMBIAN 5.25 stable Debian GNU/Linux 8 (jessie) 3.4.113-sun8i
■ 新規インストールソフト
hostapdはデフォルトでインストールされているため下記2点を新規インストールして下さい。
dnsmasq:DNS・DHCPサーバとして機能
iptables-persistent:iptablesによる設定事項を保存し起動時に読み込ませるのに必要です。
$ sudo apt-get install dnsmasq iptables-persistent
iptables-persistent
では2つの設定画面が表示されるので両方共yes
を選択して下さい。
■ 設定フロー
設定フローは以下の通りです。
iw list
によるWiFiモジュールの機能確認- NetworkManagerの無効化
hostapd
(アクセスポイントデーモン)の設定- ネットワークインターフェイスの設定
dnsmasq
の設定- NATとiptablesの設定
1. iw listによるWiFiモジュールの機能確認
iw list
コマンドによりWiFiモジュールの機能確認をします。
$ sudo iw list
出力内容からSupported interface mode
の項を確認します。
Supported interface modes:
* IBSS
* managed
* AP
* monitor
* P2P-client
* P2P-GO
software interface modes (can always be added):
* monitor
interface combinations are not supported
AP
がリストアップされていればアクセスポイントとしての利用ができます。
2. NetworkManagerの無効化
ArmbianではデフォルトでインストールされているNetworkManager
ですが、デスクトップ環境でネットワーク設定をしないのであれば無効化した方がネットワーク設定の自由度が上がります。システムサービスとして起動しているのでサービス停止・無効とし、サービスデーモンを再読込します。
$ sudo systemctl stop NetworkManager
$ sudo systemctl disable NetworkManager
$ sudo systemctl daemon-reload
NetworkManagerサービスを無効化することで従来のNetworkサービスが自動的に有効となります(メモリー消費量も50MB以上は削減されると思います)。
ネットワークの設定は/etc/network/interfaces
ファイルにより行います。
3. hostapd(アクセスポイントデーモン)の設定
hostapd起動時の設定ファイルを指定します。
$ sudo pico /etc/default/hostapd
以下DAEMON_CONF="/etc/hostapd/hostapd.conf"
を指定します。
# Defaults for hostapd initscript
#
# See /usr/share/doc/hostapd/README.Debian for information about alternative
# methods of managing hostapd.
#
# Uncomment and set DAEMON_CONF to the absolute path of a hostapd configuration
# file and hostapd will be started during system boot. An example configuration
# file can be found at /usr/share/doc/hostapd/examples/hostapd.conf.gz
#
DAEMON_CONF="/etc/hostapd/hostapd.conf"
hostapd設定ファイルを作成します。
$ sudo pico /etc/hostapd/hostapd.conf
ssidによるアクセス先とwpa_passphrase
によるパスワードなどを指定します。interfaceには$sudo iwconfig
コマンドにより表示される2つのWiFiネットワークインターフェイスwlan0またはwlan1を指定して下さい。
ssid=access_point_name
interface=wlan0
hw_mode=g
channel=5
driver=nl80211
logger_syslog=0
logger_syslog_level=0
wmm_enabled=1
ieee80211n=1
wpa=3
preamble=1
#wpa_psk=xxxxx
wpa_passphrase=pass_phrase
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP TKIP
rsn_pairwise=CCMP
auth_algs=1
macaddr_acl=0
noscan=1
#ht_capab=[HT40-][SHORT-GI-40][SHORT-GI-40][DSSS_CCK-40]
country_code=JP
#ieee80211d=1
4. ネットワークインターフェイスの設定
/etc/network/interfaces
ファイルによるネットワークインターフェイスの設定を行います。
$ sudo pico /network/interfaces
設定内容は以下の通りですが内容は任意です。
# Wired adapter #1
allow-hotplug eth0
#no-auto-down eth0
iface eth0 inet dhcp
#address 192.168.0.100
#netmask 255.255.255.0
#gateway 192.168.0.1
dns-nameservers 8.8.8.8 8.8.4.4
# hwaddress ether # if you want to set MAC manually
# pre-up /sbin/ifconfig eth0 mtu 3838 # setting MTU for DHCP, static just: mtu 3838
# Wireless adapter #1
# Armbian ships with network-manager installed by default. To save you time
# and hassles consider using 'sudo nmtui' instead of configuring Wi-Fi settings
# manually. The below lines are only meant as an example how configuration could
# be done in an anachronistic way:
#
#---- Realtek 8188eu wlan interface AP (access defined in /etc/hostapd/hostapd.conf)
allow-hotplug wlan0
iface wlan0 inet static
address 192.168.14.164
netmask 255.255.255.0
network 192.168.14.0
#gateway 192.168.0.1
#dns-nameservers 8.8.8.8 8.8.4.4
# wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
# Disable power saving on compatible chipsets (prevents SSH/connection dropouts over WiFi)
#wireless-mode Managed
#wireless-power off
#----Realtek 8188eu wlan interface client
allow-hotplug wlan1
iface wlan1 inet dhcp
#address 192.168.10.164
#netmask 255.255.255.0
#network 192.168.10.0
#gateway 192.168.10.1
dns-nameservers 8.8.8.8 8.8.4.4
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
# Disable power saving on compatible chipsets (prevents SSH/connection dropouts over WiFi)
#wireless-mode Managed
#wireless-power off
# Local loopback
auto lo
iface lo inet loopback
wlan0をアクセスポイント、wlan1をインターネットに接続されている市販ルータのクライアントとして設定しています。
wlan1から市販ルータへの接続はwpa_supplicant
により処理されるのでwpa_supplicant.conf
を編集します。
以下コマンドによりアクセスポイントへのパスワードを暗号化します。
$ wpa_passphrase MYSSID passphrase
network={
ssid="MYSSID"
#psk="passphrase"
psk=59e0d07fa4c7741797a4e394f38a5c321e3bed51d54ad5fcbd3f84bc7415d73d
}
出力された内容を以下のファイルに書き込みます。
$ sudo pico /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="MYSSID"
#psk="passphrase"
psk=59e0d07fa4c7741797a4e394f38a5c321e3bed51d54ad5fcbd3f84bc7415d73d
key_mgmt=WPA-PSK
priority=99
}
5. dnsmasqの設定
アクセスポイントとして設定したモジュールに接続するクライアント端末にIPアドレスを割り当てるために、ハード本体にDHCPサーバ機能を持たせる必要があります。isc-dhcp-serverも候補に入れましたがdnsmasqの方が軽量で設定も簡単であることから今回はdnsmasqをインストールしました。ページ頭の事前準備でインストール済です。dnsmasq.conf
により設定をします。
$ sudo pico /etc/dnsmasq.conf
デフォルトでdnsmasqのDHCP機能は無効にされているため、使用したいときは/etc/dnsmasq.conf
で有効にする必要があります。以下は中心となる設定です:
# Only listen to routers' LAN NIC. Doing so opens up tcp/udp port 53 to
# localhost and udp port 67 to world:
interface=wlan0
# dnsmasq will open tcp/udp port 53 and udp port 67 to world to help with
# dynamic interfaces (assigning dynamic ips). Dnsmasq will discard world
# requests to them, but the paranoid might like to close them and let the
# kernel handle them:
bind-interfaces
# Dynamic range of IPs to make available to LAN pc
dhcp-range=192.168.14.164,192.168.14.200,12h
# If you’d like to have dnsmasq assign static IPs, bind the LAN computer's
# NIC MAC address:
dhcp-host=aa:bb:cc:dd:ee:ff,192.168.14.164
dhcp-hostのwlan0のハードウェアアドレスは$sudo ifconfig
により確認して下さい。dhcp-rangeの設定など/etc/network/interfaces
との整合性を考慮する必要があります。
DNS キャッシュの設定
単一のコンピュータ上で dnsmasq を DNS キャッシュデーモンとしてセットアップするには /etc/dnsmasq.conf
を編集して listen-address
ディレクティブをアンコメントし、ローカルホストの IP アドレスを追記してください:
listen-address=127.0.0.1
DHCPサーバ側(dnsmasq側)の設定
dnsmasq を設定した後は、DHCP クライアントが /etc/resolv.conf
にある既知の DNS アドレスの前にローカルホストのアドレスを挿入させるようにする必要があります。これによって外部の DNS でクエリを解決しようとする前に全てのクエリが dnsmasq に送られるようになります。
DHCPクライアントソフトにより設定が異なります。
dhcpcdの場合
dhcpcd には /etc/resolv.conf
にネームサーバを前と後ろに追加する機能があります。それぞれ /etc/resolv.conf.head
と /etc/resolv.conf.tail
ファイルを作成します:
echo "nameserver 127.0.0.1" > /etc/resolv.conf.head
dhclientの場合
dhclient の場合、/etc/dhcp/dhclient.conf
の以下の部分をアンコメントしてください:
prepend domain-name-servers 127.0.0.1;
6. NATとiptablesの設定
NATによりアクセスポイントに接続した複数のクライアントを1つのIPアドレスへと導きます。
$ sudo pico /etc/sysctl.conf
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1
net.ipv4.ip_forword=1
の箇所をアンコメントします。
設定をすぐに反映させるため、
$ sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
を実行します。
iptableによりwlan0とwlan1の橋渡しの設定をします。
$ sudo iptables -t nat -A POSTROUTING -o wlan1 -j MASQUERADE
$ sudo iptables -A FORWARD -i wlan1 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
$ sudo iptables -A FORWARD -i wlan0 -o wlan1 -j ACCEPT
以下のコマンドで上記設定の確認ができます。
$ sudo iptables -t nat -S
$ sudo iptables -S
システム起動時に上記設定を自動的に読み込ませるためiptables-persistent
による以下コマンドを実行します。
$ sudo sh -c "iptables-save > /etc/iptables/rules.v4"
再起動してアクセスポイントの表示と接続が確立されるか確認して下さい。
フォーラムにも同内容を掲載します。問題など発生した場合には、その都度フォーラム記事の方で改善点を掲載するようにします。