2016年7月7日木曜日

リンクアグリケーションで静的とか動的の意味を理解していなかった話

参考文献とか引用とか足りないとは思うがあくまでも鳥頭の自分がまた忘れる前にメモということにしておく。こういうところならローカルで埋もれたりディスククラッシュ等々よりも安全でしょうし
業務でやっている人々には当たり前の話かもしれませんが触る機会がないと単語だけ渦巻いて躓くことだってあるんですよ。

事の発端はIntel I350-T4を取り付けてFreeNASでリンクアグリケーションをしようとしてよく分からなかったと言うところだったんですがそれはさておき、自宅のLANでリンクアグリケーション(チーミング? ボンディング?)をしようかと思ってNICを複数そろえたりスイッチを買っているうちに上手くいかないなと思っていたことがあったのですが要するにこういうことだったらしいということ

リンクアグリケーションって静的と動的の2タイプあるっぽい
多分下記くらいの認識しておけばこのレベルで悩んでいる場合OKっぽい
  • 静的アグリケーション->設定等々でStaticと表記されるようなもの
  • 動的アグリケーション->設定等々でLACPと表記されるようなもの

GS116の場合 ( http://www.netgear.jp/products/details/GS116E.html
例えばネットギアのGS116はリンクアグリケーション対応と書いてあってもLACP対応とは書いてない、専用ユーティリティーやWebインターフェース上ではアグリケーション可能なんだけどこいつの場合静的しか対応していないという事だった。スイッチ側の設定と、NICやOS側両方の設定が必要になる。
 
GS108Tの場合 ( http://www.netgear.jp/products/details/GS108T.html
GS108TだとmanualもLACPも対応と書いてあるのでLACPも使えるらしい、LACPだとスイッチ側の設定がいらないらしい(実はスイッチ持ってない…)

  • アンマネージドプラスだと静的のみ
  • スマートスイッチだと静的動的両方

ネットギアさんのスイッチだと上記くらいに思っておけば良いらしく、
個人的にはLVAN切るだけ(+スイッチ間のアグリケーション)ならアンマネージドプラス、スイッチ<->コンピュータ間のアグリケーションもしたいなスマートスイッチなのかなと

  • 静的動的共にスイッチのサポート必要なしでOS側の設定だけで可能なもの
  • 静的対応のスイッチが必要なもの
  • LACP対応のスイッチが必要なもの

今更なんだけどリンクアグリケーションってやるなら上記パターン知らないといけないんだなってのと、それ以上は真面目なドキュメント読んだほうがいいんじゃないでしょうか、RedhatとかFreeNASとか

2016年5月2日月曜日

RTX1200からlinux上の透過プロキシとして待ち構えているsquidに通信をフォワードする

はじめに

RTX1200を手に入れた後、やりたかった透過proxyサーバへ通信をねじ曲げる方法が調べてもまとまった情報として見つけることが出来なかったのでここにメモする。
恐らくは「RTX1200 透過プロキシ」なんかでググっていたのが悪いとは思うものの未だにどう調べればピンとくるんだということが分かっていない。

ip foward コマンド使え

RTX1200がゲートウェイの環境にて透過プロキシを使用したい場合、下記方法で指定したパケットをフォワードする必要がある。

参考) パケット転送フィルター
http://www.rtpro.yamaha.co.jp/RT/docs/forward-filter/


例えば、192.168.1.254のアドレスが設定されたRTX1200において192.168.1.2~192.168.1.253までのIPアドレスから外部へのhttp通信をRTX1200から192.168.1.1の透過プロキシサーバにフォワードする場合は下記のconfigになる。
このとき、ループの原因となるためフォワードするIPアドレスの範囲にRTX1200とプロキシサーバのアドレスを含まないようにする。

RTX1200側のconfig
ip lan1 address 192.168.1.254/24
ip lan1 forward filter 100
ip forward filter 100 1 gateway 192.168.1.1 filter 1100
ip filter 1100 pass 192.168.1.2-192.168.1.253 * tcp * www

Linuxで構築されているsquidサーバ
iptablesの記述
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -j DNAT --to 192.168.1.1:3128
プロキシの設定(今回はsquidなので/etc/squid.conf )
http_port 3128 intercept
その他
デフォルトゲートウェイ設定は192.168.1.254 ( <- RTX1200のアドレス) 

上記設定で後はsquidのログを確認するとよい。

プロキシサーバが落ちた場合どうするのか?

RTX1200は正常に動いているのにプロキシサーバ側が落ちたらどうするの?ということを考えなければいけないんだけどRTX1200でpingによる死活監視をして切り替えることができるっぽい。
ただし、これだけだと多分squidだけが落ちていて192.168.1.1からpingが返ってくると切り替わらない気がする。

参考 ) ネットワークバックアップ機能
http://www.rtpro.yamaha.co.jp/RT/docs/backup/network-backup.html

例えば下記を用意した場合、下記configを使うとプロキシサーバAである192.168.1.1からのpingが帰ってこなくなるとBに切り替えてくれる。

  • RTX1200
  • プロキシサーバ A 192.168.1.1
  • プロキシサーバ B 192.168.1.2 <- AとIPアドレス以外同じ設定


ip lan1 address 192.168.1.254/24
ip lan1 forward filter 100
ip filter 1100 pass 192.168.1.2-192.168.1.253 * tcp * www
ip keepalive 1 icmp-echo 5 5 192.168.1.1
ip forward filter 100 1 gateway 192.168.1.1 filter 1100 keepalive 1
ip forward filter 100 2 gateway 192.168.1.2 filter 1100

2016年3月26日土曜日

squid+privoxyの多段プロキシ環境で、親プロキシを経由させないホワイトリスト設定をする

squidで親プロキシをわざと経由させないルールやホワイトリストを作成したい

透過プロキシにて Squid -> Privoxy を通し、Webページの広告フィルタリングとキャッシュを行うときにキャッシュしたくないURLや広告フィルタリングを通したくないページなどがあるのでどうするべきかということを試した。

PC -> デフォルトゲートウェイ -> Squid(http_port *** intercept) -> privoxy -> インターネット

上記のような環境で透過プロキシとしてSquid+Privoxyを組み合わせるときに、そのゲートウェイを使うPCからは全て一度Squidに入りますが、親プロキシであるprivoxyを経由させないホワイトリストをsquid.confにて設定する話になります。

補足になりますが、私の環境ではtcp/80のインターネットに出る通信だけをRTX1200からプロシキサーバにフォワードしているので、http以外のことは知らないしあまり深入りはしないようにしようと思っています。


また、大前提として下記を想定していますがそういう話はこれ以上省きます。

  • ゲートウェイからインターネットに出るtcp/80の通信を全てsquidにフォワードしている
  • Squidは透過モード
  • Squidが子供 ( Arch linux squid 3.5.15-2 )
  • Privoxyが親 ( Arch linux privoxy  3.0.24-2 )
  • squid.confの親プロキシ設定は下記1行のみ
cache_peer 127.0.0.1 parent 8118 7 no-query



パターン1 クライアントのIPアドレスで親プロキシを経由しない場合



  • 192.168.254.1~127までは親プロキシを経由する
  • 192.168.254.128~192.168.254.254まで親プロキシを経由しない

ということが可能になる。
ゲーム機やAmazon FireTVStick等をdhcp側でIPアドレス決め打ちするときに便利

acl noFilterSrc src 192.168.254.128-192.168.254.254
always_direct allow noFilterSrcIp
never_direct allow all

パターン2 指定ドメインにアクセスするときに親プロキシを経由しない


主にトラブル回避のためにxbox.comとかmicrosoft.comとか、
特定のドメインにアクセスするときには親プロキシであるprivoxyを経由しない。
親プロキシが今回のようにフィルタリングプロキシの場合、
privoxy側のフィルタルールを緩めたり例外するのも勿論とは思いますが:p

acl noFilterDomain dstdomain "/etc/squid/noFilterDomainList"
always_direct allow noFilterDomain
never_direct allow all

/etc/squid/noFilterDomainListの中身
# Bypass filter proxy domain List
.yahoo.co.jp
.google.com
.xbox.com
.microsoft.com
.apple.com
.steampowered.com

パターン3 指定した拡張子のファイルにアクセスするときに親プロキシを経由しない


主にprivoxy等の不可が酷くなる場合で尚且つアンチウイルスレイヤーを貼っていない場合にバイナリファイル等を拡張子で判別して親プロシキを経由しない。

acl noFilterFileExt url_regex \.(zip|exe|iso|img|7zip|rar|bin|dll|msi|bundle)$
always_direct allow noFilterFileExt
never_direct allow all

上記3パターンを全て混合する場合は下記のような記述になります。

acl noFilterSrcIp src 192.168.254.128-192.168.254.254
acl noFilterFileExt url_regex \.(zip|exe|iso|img|7zip|rar|bin|dll|msi|bundle)$
acl noFilterDomain dstdomain "/etc/squid/noFilterDomainList.txt"
cache_peer 127.0.0.1 parent 8118 7 no-query
always_direct allow noFilterSrcIp
always_direct allow noFilterFileExt
always_direct allow noFilterDomain
never_direct allow all

(2016年11月21日 勘違いしている箇所もあったので修正及び追記)