おのたく日記 YouTubeも始めました→
2007-11-28(Wed) Lafoneraを使ってトンネリング [長年日記]
■ [FON]Lafoneraを使ってトンネリング
とある場所で、SSH用のPort 22は通るけど、その他のポートがFirewallでふさがれている環境があって、そこでどうしてもPort 16200に接続されるクライアントを使いたかったので、9月25日の日記で中に入れるようにしたFONのLafoneraを利用して、
クライアント--16200--->Lafonera--22--->Firewall--22--->おうちサーバ(PROXY)--16200-->本当のサーバ
のような経路にしてFirewallを越える事にした。
※本当はクライアントでPort 22で出せればLafoneraは入らないのだけど専用クライアントなので、Portを変更できないのでLafoneraの出番でした。
■ Lafonera側の設定
Port 16200をおうちサーバに転送するために /etc/firefall.user に
#add by MyPlace SS redirect to PROXY
TRUESERER=172.254.1.10 #本当のサーバ
PROXYSERVER=172.254.100.199 #プロキシサーバ
iptables -t nat -I prerouting_rule -i $LAN -d $TRUESERVER -p tcp --dport 16200 -j DNAT --to $PROXYSERVER:22
と書いて、MyPlaceに接続された端末から本当のサーパーのPort 16200に行くパケットをプロキシーサーバのPort 22に転送する。
※DNATは、返事のパケットの世話もしてくれる。See: Iptablesチュートリアル 1.2.0
■ プロキシーサーバの設定
プロキシといってもHTTP ProxyではなくてPort fowarderね。
iptableだけで作ろうとしたけど、「DNATで本当のサーバに向け直して、返事もPROXY経由で戻るようにSNATを付け直して…」と考えていたら頭が痛くなったので、TCPをプロキシできるsimpleproxyを使うことにした。
つまり、まずPort 22で受けて、それをPort 16200に回して、16200に来たアクセスを本当のサーバのPort 16200に転送する事にした。
■ 1. TCP 22ポートのリダイレクト
Port 22で受けたのをPort 16200に回す部分(ip-up.localにて)
#simpleproxy SS redirect from HP
CLIENTNET=172.254.15.0/24 #クライアントのネットワーク
PROXYSERVER=172.254.100.199 #プロキシサーバ
$LOGGER -p syslog.info "Insert simpleproxy redirect."
iptables -N ss_redirect -t nat 2>/dev/null || iptables -F ss_redirect -t nat
iptables -I ss_redirect -t nat -s $CLIENTNET -d $PROXYSERVER -p tcp --dport 22 -j REDIRECT --to-ports 16200
iptables -I PREROUTING -t nat -i $IFACE -j ss_redirect
iptables -I MyIP -s $CLIENTNET -d $PROXYSERVER -p tcp --dport 16200 -j ACCEPT
専用のチェーンss_redirectを作って、クライアントのネットワークからプロキシサーバのPort 22に接続がきたら自分自身のPort 16200にリダイレクトする。
*1 「-s $CLIENTNET」としているのは、クライアントネットワーク以外からの接続では従来通りSSHが出来るようにしておくため。
*2 最後の1行のMyIPチェインはプロキシーサーバのポートはブロック設定。Port 16200へのアクセスを許可している。
■ 2. 本当のサーバへの転送
inetdにて、Port 16200にアクセスがあったら、simpleproxyで本当のサーバにプロキシする設定
TRUESERER=172.254.1.10 #本当のサーバ
update-inetd --add "16200\tstream\ttcp\tnowait\tnobody\t/usr/bin/simpleproxy\tsimpleproxy -i -R $TRUESERVER:16200"
これで、/etc/inetd.confに新しい行ができる。
|