ゲストLANを構築してみた
RTX1100と今流行の小型PC?の一種pcDuino(RaspberryPi見たいなやつ)使ってゲストLANを構築してみました。
今回ゲストLANに求める要件としては以下
- ゲストLANはサブネットを分ける
→今回はルータを挟むことにしました - ゲストLANは別に速くなくてもいい
→なので100Mbpsで十分 - ゲストには横着なことされたくない
→通信をhttpとhttpsに制限して、なおかつproxy経由以外で通信できなくする
要件を満たすための今回設定したことを、備忘録的につらつらと書いていこうと思います。
ただし、結論から書くと、RTXの設定でわからなかった(思い通りいかなかった部分もある)のでそのへんご了承願ます。
フィルター難しい・・・。
RTXの設定
RTX側でやらせたいことは、すごく簡単にまとめちゃうと「proxyのwebな通信以外を禁止する」ことです。
ただ、最初は通信を完全に遮断したのですが、それやったらurlフィルター動かなくなったので許可しちゃってます。
また、そのurlフィルターもhttpの時は動くのですが、httpsの時動かなくてうーん。
まぁ、実際の設定を貼っつけたほうがいいと思うので貼っつけます。
ip route default gateway 192.168.128.1 ip lan1 address 192.168.132.1/24 ip lan1 secure filter in 100 101 102 103 url lan1 filter in 100 101 ip lan3 address 192.168.128.7/24 ip lan3 nat descriptor 1 ip filter 100 pass 192.168.132.2,192.168.132.100-192.168.132.191 * tcp * www,https ip filter 101 pass * * udp * dhcps ip filter 102 pass * * udp * domain ip filter 103 pass * * icmp * * ip filter 104 reject * * * * nat descriptor type 1 masquerade nat descriptor timer 1 protocol=tcp port=www 120 nat descriptor address outer 1 primary nat descriptor address inner 1 auto nat descriptor masquerade session limit 1 1 200 url filter use on url filter port 80 443 url filter reject redirect http://proxy.local/block.html url filter 100 pass * 192.168.132.2 url filter 101 reject * * dhcp service server dhcp server rfc2131 compliant except remain-silent dhcp scope 1 192.168.132.100-192.168.132.191/24 gateway 192.168.132.1 dhcp scope option 1 dns=192.168.132.1 252=68,74,74,70,3a,2f,2f,70,72,6f,78,79,2e,6c,6f,63,61,6c,2f,70,72,6f,78,79,2e,70,61,63 dns server 8.8.8.8 dns cache max entry 1024 dns private address spoof on ip host proxy.local 192.168.132.2 schedule at 1 */* *:00 * ntpdate ntp.nict.jp
- フィルターの設定
内容、かなり未熟だと思う。。
ここに書きながら「こうすればいいのになんで?」ッて思う箇所あるけど、実際こうやって設定ましたっていうのを正直に載せます。
ip lan1 secure filter in 100 101 102 103 url lan1 filter in 100 101 ip filter 100 pass 192.168.132.2,192.168.132.100-192.168.132.191 * tcp * www,https // ホントは192.168.132.2だけにしたかたんだけど、urlフィルタうまく動かなかった ip filter 101 pass * * udp * dhcps // dhcp動かしたかった ip filter 102 pass * * udp * domain // dns動かしたかった ip filter 103 pass * * icmp * * // ping使いたかった ip filter 104 reject * * * * // 使いたかった奴以外を使いたくなかった url filter use on url filter port 80 443 // httpsが動かねー!! url filter reject redirect http://proxy.local/block.html url filter 100 pass * 192.168.132.2 // プロキシ以外からのwebアクセス禁止 url filter 101 reject * *
- DHCPの設定
dhcpでプロキシの自動設定を配りたかったので設定。
キーを252にして、valueをproxy.pacのアドレスをasciiに変換するといいみたい。 次のサイトが参考になりました。
https://blog.cles.jp/item/7330
ascii変換にはこのサイト使いました。
http://web-apps.nbookmark.com/ascii-converter/
dhcp scope option 1 dns=192.168.132.1 252=68,74,74,70,3a,2f,2f,70,72,6f,78,79,2e,6c,6f,63,61,6c,2f,70,72,6f,78,79,2e,70,61,63
- DNSの設定
proxy.pacの配布にローカル用の名前解決させないといけないかなーって思ったので
dns cache max entry 1024 // キャッシュ増やせばそれだけ上位の負荷減るかなーって dns private address spoof on // 要るか要らないかわからなかった・・・ ip host proxy.local 192.168.132.2 // プロキシサーバを設定
- NATの設定
NATの設定の仕方調べてたら、NATテーブルを使い過ぎないようにする設定があったので、その辺もノリで設定しました。
nat descriptor type 1 masquerade nat descriptor timer 1 protocol=tcp port=www 120 // NATテーブルの保持時間をデフォルトの15分→2分に!? nat descriptor address outer 1 primary nat descriptor address inner 1 auto nat descriptor masquerade session limit 1 1 200
- その他
なんか設定中にルータの時間が1980年になってたので、勢いで時刻の同期設定
schedule at 1 */* *:00 * ntpdate ntp.nict.jp
pcDuinoの設定
pcDuinoってなんぞやって人はこのサイト読んで下さい。
http://www.linksprite.com/linksprite-pcduino1/
中身は普通にlubuntuなので、こいつにsquid3とproxy.pac配布用にnginxをインストールしました。
- ウザいネットワークマネージャの削除
$ sudo apt-get remove network-manager
- 固定IPの設定
/etc/network/interfaces
auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 192.168.132.2 network 192.168.132.0 netmask 255.255.255.0 broadcast 192.168.132.255 gateway 192.168.132.1 dns-nameservers 192.168.132.1
- squid3のインストール
$ sudo apt-get install squid3
- squid3の設定
/etc/squid3/squid.conf(抜粋)
# ポート http_port 3128 # これやんないと使えないのでアクセス許可 acl localnet src 192.168.132.0/24 http_access allow localnet # プロキシ経由を隠す forwarded_for off request_header_access X-Forwarded-For deny all request_header_access Via deny all request_header_access Cache-Control deny all reply_header_access X-Forwarded-For deny all reply_header_access Via deny all reply_header_access Cache-Control deny all # キャッシュ増やす cache_mem 256 MB maximum_object_size_in_memory 2048 KB maximum_object_size 64 MB
- squid3の再起動
$ sudo service squid3 restart
- nginxのインストール
なんとなく、公式?リポジトリを追加してます。
$ wget -O - http://nginx.org/keys/nginx_signing.key | sudo apt-key add - $ sudo sh -c 'echo "deb http://nginx.org/packages/ubuntu/ trusty nginx" >> /etc/apt/sources.list' $ sudo sh -c 'sudo echo "deb-src http://nginx.org/packages/ubuntu/ trusty nginx" >> /etc/apt/sources.list' $ sudo apt-get update $ sudo apt-get install nginx $ sudo service nginx start $ sudo update-rc.d nginx defaults
- proxy.pacの配置
よくわからなかったのでテキトーに書いちゃいました
/usr/share/nginx/www/proxy.pac
function FindProxyForURL(url, host) { if ( isInNet(host, "192.168.132.0" , "255.255.255.0" ) || isInNet(host, "127.0.0.0" , "255.0.0.0" ) ) return "DIRECT"; else return "PROXY proxy:3128"; }
application/x-ns-proxy-autoconfig pac;
- リダイレクトの時のページの配置
ついでのRTXでurlフィルターでrejectされた時のページをmarkdownをpandocで変換して作成して、配置しました。
/usr/share/nginx/www/block.html
所感
今回、やりたいことは大体出来たかと思いますが、RTXのフィルターがかなり甘いのと、urlフィルターがhttpsなページでうまくリダイレクトかからないのが残念です。
ルーター設定はやっぱり難しいですね!!
あと、日頃markdown書くときはVSCode使ってますが、はてなブログへ投稿するとめちゃくちゃ崩れちゃって使いにくい!!
何かいい方法ナイカナー