Ubuntu

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

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