2011年4月5日火曜日

iptables+xinetdで強引トンネル

久々に変なことしたのでブログネタに。

一定期間、 192.168.10.200/24 のサーバを 192.168.20.200/24 のセグメントに移設することになりました。でもこのサーバは利用者がいるので、なくなると困ります。

20110404a


この絵だとDNSで名前を付け直せばいいという話もありますが、今回はそういう手を使うわけにはいかなかったので、隣にいる Linux サーバ、 192.168.10.100/24 に 192.168.10.200 のホストも兼ねさせることにしました。

# ifconfig eth0:1 inet 192.168.10.200 netmask 255.255.255.255




20110404b

いちばんまっとうな手としては 192.168.10.100/24 のマシンに 192.168.10.200 のアドレスを振って、各アドレスごとに別のデーモンを立ち上げることです。でも、できるだけ既存サーバの 192.168.10.100 には手を加えたくなかったので、 192.168.20.200 の目的のポートへ通信がきたときに redirect するようにしました。(酷

# iptables -t nat -A PREROUTING -p tcp --dest 192.168.10.200 --dport 22
     -j REDIRECT --to-port 50023

20110404c

そして、ネットワーク上から 192.168.10.200:22 にアクセスすると、 192.168.10.100:50022 に TCP 接続されるようになりました。今度は、 192.168.10.100:50022 にアクセスが来たら、それを xinetd の TCP リダイレクションでネットワークの果てにある 192.168.20.200:22 に飛ばします。

service hoge-ssh
{
        disable = no
        socket_type = stream
        protocol = tcp
        wait = no
        user = daemon
        group = sys
        redirect = 192.168.20.200 22
}

# echo "hoge-ssh 50022/tcp" >> /etc/services

20110404d

かなり酷い手ではありますが、とりあえず期間限定なのでOK!

実際には、これをインターネット越しに SSH, HTTP, その他のプロトコルを stunnel で保護しながらトンネルしました。

0 件のコメント:

コメントを投稿