Raspberry Piをルーター&DHCPサーバーにしようとしてできなかった話
自分用のログなので悪しからず.
事の発端
今まで使っていたBuffalo製のルーターが壊れたので新しいものを買うことになったのですが,違う会社のルーターも使ってみるかということでNEC製のルーターを買いました.
これが大外れでPPTPサーバーの機能はないしログ出力もない.というわけでこれはブリッジ専用機にしてRaspberry Piをルーター&DHCPサーバーにすることにしました.こうすればWebサーバーにするときも楽そうだしPPTPサーバーも簡単に追加できそうですからね.
とりあえず以下のような構成にしたい.
(the Internet) | | (Raspberry Pi) | | (ゴミルーター)←ブリッジモード | |←無線 (PC, iPad, etc..)
…というわけでRaspberry Piのデータを全部消してあれこれやったのですがうまくいってません.以下そのログ.
初期設定
Raspbianの公式サイトにOSのイメージファイルがそのまま置いてあるのでこれをSDカードに展開します. SSHを使ってusername:pi password:raspberry でログインできるはず. SoftPerfect Wi-Fi Guardとかを使えばRaspberry PiのIPはわかる.
rootのパスを変更し,さらにユーザーを追加.visudo で追加した一般ユーザーがsudo出来るようにする.その後piは削除.SSHではrootにはアクセスできないので注意.
$ sudo passwd root $ sudo adduser [username] $ visudo (new userに切り替えて) $ sudo userdel -r pi
アップデートと必要なソフトだけインストールする.DHCPサーバーはdnsmasqを使う予定.
$ sudo apt-get update $ sudo apt-get upgrade $ sudo apt install vim dnsmasq dnsutils netfilter-persistent
あれこれの設定
IPは次のようにしたい.(よくわかってない)
Raspberry Piのthe Internet側のIPは192.168.122.1,LAN側のIPは192.168.122.2
DHCPの割り当て範囲は192.168.122.10-30
とりあえずRaspberry PiのIP固定をする.
/etc/network/interface
auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 192.168.122.1 network 192.168.122.0 netmask 255.255.255.0 broadcast 192.168.122.255 gateway 192.168.0.1 auto eth1 iface eth1 inet static address 192.168.122.2 netmask 255.255.255.0 gateway 0.0.0.0
eth0がthe Internet側,eth1がLAN側(ゆくゆくはブリッジモードのルーターにつなぐ側) gatewayがよくわかってないのでここがなんか問題な気がする.要見直し.
次にiptablesの設定.
$ sudo iptables -A FORWARD -i eth1 -s 192.168.122.0/24 -m conntrack --ctstate NEW -j ACCEPT $ sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT $ sudo iptables -t nat -A POSTROUTING -s 192.168.122.0/24 -j MASQUERADE $ sudo iptables-save $ sudo /etc/init.d/netfilter-persistent save $ sudo /etc/init.d/netfilter-persistent restart
dnsmasqの設定.とりあえずデフォルトの設定ファイルが長いので別のファイルも設定ファイルにするように設定.
/etc/dnsmasq.conf
conf-file=/etc/dnsmasq.more.conf
/etc/dnsmasq.more.conf
interface=eth1 dhcp-range=192.168.122.10,192.168.122.30,12h dhcp-option=option:dns-server,192.168.122.2,8.8.8.8 dhcp-option=option:router,192.168.0.1 dhcp-leasefile=/var/lib/misc/dnsmasq.leases log-dhcp
これ大丈夫なんですかね.logは/var/log/syslogに出るはず. 最後に起動時にdnsmasqをロードするように設定
$ sudo systemctl dnsmasq enable
参考:
ここまでやって再起動. eth0とthe Internet,eth1を適当なPCにつないだけどダメっぽかった. ログは読んだけどよくわからなかった.
とりあえずここまで.
LXCコンテナのネットワーク設定
友人に教えてもらいながらあれこれいじったらつながったので,やり方をまとめておきます.
使っているのはDebian jessieです.
コンテナは既に作成できているとして進めます.
ブリッジを作成する
nm-connection-editorを使いました.
(MATEの場合はパネルのシステム-設定-ネットワークの設定でもOK)
追加ボタンからブリッジを作成し,編集でIPv4のセッティングを開き,方式を手動に変更. アドレスを追加して以下のように設定.
アドレス:192.168.122.1
ネットマスク:255.255.255.0
ゲートウェイ:0.0.0.0
コンテナ側のネットワーク設定
/var/lib/lxc/myjessie/下の以下のファイルをいじります.
- config
- rootfs/etc/network/interfaces
- rootfs/etc/resolv.conf
以下を追加. config:
lxc.network.type = veth lxc.network.flags = up lxc.network.link = br0 lxc.network.ipv4 = 192.168.122.2/24 lxc.network.ipv4.gateway = 192.168.122.1
/rootfs/etc/network/interfaces:
auto eth0 # iface eth0 inet dhcp iface eth0 inet static address 192.168.122.2 netmask 255.255.255.0 network 192.168.122.0 broadcast 192.168.122.255 gateway 192.168.122.1
/rootfs/etc/resolv.conf:
nameserver 8.8.8.8
ホスト側の設定
ここまでやればホストとコンテナはつながっているので*2,コンテナが外にアクセスできるようにします.
まずetc/sysctl.confの次の行のコメントアウトを削除.
#net.ipv4.ip_forward=1
その後,iptablesでNATを以下のように設定. 予めnetfilter-persistentをインストールしておくこと.
% sudo iptables -A FORWARD -i br0 -s 192.168.122.2/24 -m conntrack --ctstate NEW -j ACCEPT % sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT % sudo iptables -t nat -A POSTROUTING -s 192.168.122.2/24 -j MASQUERADE % sudo iptables-save % sudo /etc/init.d/netfilter-persistent save % sudo /etc/init.d/netfilter-persistent restart
これでコンテナから外にアクセスできると思います.
参考
以下の記事を参考にさせていただきました.ありがとうございます.
NetworkManager で仮想環境用に bridge を作成
おまけ:コンテナにpingをインストール
コンテナにpingがインストールされてなくて,困っている方も多いのではないでしょうか.コンテナのネットワークが設定できていなくても,chrootを使えばインストールできます.*3
% sudo chroot /var/lib/lxc/myjessie/rootfs % apt-get install iputils-ping
セミナー予習のやり方
なんとなく書く.参考になれば.
- とりあえず予習するつもりの範囲をさーっと読む.定理の証明は追わずに主張だけをみてどういう流れで何を示すのかを把握する.
- もう一回最初から証明も含めて読む.読んで詰まるところは?マークをつけて飛ばす.
- ?マークの場所を考える.1つだけに時間をかけるのではなくまんべんなく.
- ノートの清書とかをする.
全体の流れを掴んでから考えるほうが行間も埋まりやすくなる場合もあるし,補題や定理を考える意味がわかりやすくなって発表時の構成が考えやすいのでよいと思います.
発表時は以下の2点に気をつけてます.
- 最初にどういう流れで何を示すのかを説明する.聞く人は発表範囲を読んでいるのでざっくりとした説明でOK.
- 発表内容は基本的に全て暗記する.たまにノートを見るのはしょうがないけどずっとノート見ながら板書するのとかは避ける.
- 分からなかった場所をはっきりと聞く.聞くは一時のなんちゃらってやつです.
pythonのパッケージのインストール
まず,Pythonのパッケージ管理システムpipをインストールする.pythonが入っていればそれを使ってインストール出来るらしい.適当な場所にhttps://bootstrap.pypa.io/get-pip.pyをダウンロード.linuxであれば
でOK.
これをpythonで実行すればインストールされる.sudo権限が必要なので忘れずに.
パッケージインストールは
sudo pip install [パッケージ名]
でOK.昔はeasy_installとかなんとかやってたけど今は必要ないらしい.便利になったなあ.
emacsを導入したので覚え書き
友人・先輩に手伝ってもらったので,他のPCにインストールするときようにメモを残しておく.
emacs自体は
sudo apt-get install emacs
でインストール出来る.
自分はパッケージが見つからない的なことを言われたので,
/etc/apt/sources.listを見てみると以下の文があってエラーになっているようだったので削除.
deb http://backports.debian.org/debian-backports squeeze-backports main
だいぶ前のバージョンのパッケージリストも参照していたみたい.なんで入ってたのかはよくわかりませんでした.
sudo apt-get update
sudo apt-get install emacs
でインストールできた.
あとOSをインストールした直後はmakeコマンドが入ってないときがあるので,その場合は忘れずにapt-get installしとえくこと.
次に友人オススメのemacsあれこれをインストールする.まず設定フォルダの初期化をするために一旦emacsを起動してすぐ終了.そして.emacs.dフォルダにemacsの初期化ファイルinit.elを作成する.
touch init.el
emacs init.el
これにいろいろ書くことでパッケージのインストール及び初期化をやってくれる.他のPCに同じ環境を作る時もパッケージのインストールをまた新たにやる必要はなくinit.elを移すだけでいいらしい.
以上.
数学科の人にお勧めしたい数学書
調べるといろんな人がお勧めの数学書を書いているけれど,自分が読んでいた本がほとんど挙げられていなかったので書いてみることにしました.
ちなみに筆者の専門は複素幾何です.
(ほとんど)読んでないけど良さげだなと思ったり良い評判を聞いてる本は(*)付きで書いています.
勉強する本を選ぶときの参考になれば.
続きを読む