↑日記で日々積み重ねた情報をトップの「わんこのページ」にまとめています。

おのたく日記 [RDF] 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に新しい行ができる。

本日のPingbacks(全0件)

Google Web検索 on-o.com内を検索