Edited at

Ubuntu 16.04 でルータつくる

More than 1 year has passed since last update.

イベント会場でWiMaxが入らなかったので急遽手元のPCをルータにした。

WiMax --- WiFi AP

ということでワークショップしようとしたが、これを

会場のWi-Fi --- 手元のPC --- HUB --- WiFi AP

とする。


DHCPサーバをインストール


$ sudo apt-get install isc-dhcp-server

デフォルトの設定は・・・


$ grep -v -e ^# -e ^\s*$ /etc/dhcp/dhcpd.conf
ddns-update-style none;
default-lease-time 600;
max-lease-time 7200;
authoritative;
log-facility local7;
subnet 192.168.42.0 netmask 255.255.255.0 {
range 192.168.42.10 192.168.42.50;
option broadcast-address 192.168.42.255;
option routers 192.168.42.1;
default-lease-time 600;
max-lease-time 7200;
option domain-name "local";
option domain-name-servers 8.8.8.8, 8.8.4.4;
}

このままでいいかな。

自分のネットワークアドレスを192.168.42.1にしておく。


動作確認

有線で接続したクライアントにIPアドレスが割り振られて、PINGができればOK


IPフォワード


$ cat /proc/sys/net/ipv4/ip_forward
0

となったので


$ sudo echo 1 > /proc/sys/net/ipv4/ip_forward
bash: /proc/sys/net/ipv4/ip_forward: 許可がありません

リダイレクトを含む sudo なのでエラーが出る。これを解決するにはスマートなやりかたがあるが、単純に以下のようにして解決。


$ sudo bash
# echo 1 > /proc/sys/net/ipv4/ip_forward
# exit

なお、この設定だと電源切ると元に戻ってしまうので永続化するには


/etc/sysctl.conf


#net.ipv4.ip_forward=1

の行を有効化する


IPマスカレード設定

これを参考に

http://qiita.com/nanbuwks/items/c75f5ff8608e2060416a

現在のインターフェースを確認


$ ifconfig
enp0s25 Link encap:イーサネット ハードウェアアドレス f0:de:f1:be:4d:44
inetアドレス:192.168.42.1 ブロードキャスト:192.168.42.255 マスク:255.255.255.0
inet6アドレス: fe80::7eab:1c95:ca84:b503/64 範囲:リンク
UP BROADCAST RUNNING MULTICAST MTU:1500 メトリック:1
RXパケット:9379 エラー:0 損失:0 オーバラン:0 フレーム:0
TXパケット:3554 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:1000
RXバイト:922001 (922.0 KB) TXバイト:404865 (404.8 KB)
割り込み:20 メモリ:f2500000-f2520000

lo Link encap:ローカルループバック
inetアドレス:127.0.0.1 マスク:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 メトリック:1
RXパケット:6607 エラー:0 損失:0 オーバラン:0 フレーム:0
TXパケット:6607 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:1
RXバイト:496392 (496.3 KB) TXバイト:496392 (496.3 KB)

wlp3s0 Link encap:イーサネット ハードウェアアドレス 64:80:99:6c:d8:ec
inetアドレス:160.194.82.50 ブロードキャスト:160.194.87.255 マスク:255.255.248.0
inet6アドレス: fe80::3578:9417:53c6:db6c/64 範囲:リンク
UP BROADCAST RUNNING MULTICAST MTU:1500 メトリック:1
RXパケット:161182 エラー:0 損失:0 オーバラン:0 フレーム:0
TXパケット:137648 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:1000
RXバイト:127518838 (127.5 MB) TXバイト:26221617 (26.2 MB

初期化


sudo iptables -t nat -F
sudo iptables -F
sudo iptables -L

上のifconfigの結果を元に以下のようにする


sudo iptables -t nat -A POSTROUTING -o wlp3s0 -j MASQUERADE
sudo iptables -A FORWARD -i wlp3s0 -o enp0s25 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i enp0s25 -o wlp3s0 -j ACCEPT

電源切ると消えてしまうけどイベント用の一時的な設定なのでこれでいいかな。

なお、永続化するには


$ sudo bash

して


# iptables-save > iptables.dat

とする。

/etc/rc.localに


iptables-restore < /(path)/iptables.dat

を書き足す。


DNSマスカレード


$ sudo apt-get install dnsmasq
$ sudo /etc/init.d/dnsmasq start
$ sudo vim /etc/dhcp/dhcpd.conf

として、一番最後の


option domain-name-servers 8.8.8.8, 8.8.4.4;


option domain-name-servers 192.168.42.1;

にする。


$ sudo /etc/init.d/isc-dhcp-server restart

これでクライアントのアドレス取得し直すと名前解決ができるようになる。