人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

隔離されたローカルLAN内で、どのipやドメインにアクセスしても同一のwebページに飛ぶようにしたいと思います。
私が思いつくのは
ルータでルーティングテーブルの設定
プロキシーの利用
等ですが、他にありましたらご提案ください。
また、上記のルーターやプロキシーを利用した際の具体的な方法も分かる方はご教授ください。


●質問者: kichitaka
●カテゴリ:コンピュータ インターネット
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● TransFreeBSD
●50ポイント

他に、DNSでリダイレクトする方法もありますがIP直指定だと働きません。
簡単なのはプロキシ利用によるリダイレクトですが、クライアント側の設定変更が必要なのと元に戻されると回避もできます。
ルータでのリダイレクトは、一度設定してしまえば楽かも知れません。ただ、ローカルネットへのアクセスの場合はルータを介さないのでリダイレクト出来ません。
逆に、リダイレクト先がローカルネット上であれば、リダイレクト先へのアクセスを扱う必要がなく、設定が若干単純化します。

全てにおいてリダイレクトするならば、プロキシの設置は簡単です。
実際にプロキシの機能は必要なく、どのような場合にも無条件で以下のようなリダイレクトするヘッダを返せば良いです。

HTTP/1.1 302 Found
Location: http://example.com/path/to/hoge

簡単な所だとinetdとshを使い、特定のポートで上記を返すshスクリプトを指定する方法でしょうか。
perlやpythonでデーモンを作るのも比較的簡単だと思います。
注意点として、単純にクライアントでプロキシ設定すると、リダイレクト先もさらにリダイレクトしようとするので、リダイレクト先だけはプロキシを使わない設定を忘れないようにしてください。

また、出来るか分かりませんが、リダイレクト先が管理下のサーバでApacheなら、それにリバースプロクシの設定をしてやることで可能になるかも知れません。
http://httpd.apache.org/docs/2.4/mod/mod_proxy.html

ルータの場合、上記の様な設定とともに、例えばiptablesのDNATでリダイレクトサーバへパケットを向けます。
http://www.asahi-net.or.jp/~aa4t-nngk/ipttut/output/dnattarget.html

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.1:8080
iptables -t nat -A POSTROUTING -p tcp --dport 80 -j SNAT --to-source $ROUTER_IP

こういった感じでIPアドレスを書き換えれば良いのではないかと思います。
この時、Apacheのリバースプロクシを使うと柔軟な設定が出来る気がします。


2 ● JULY
●50ポイント

隔離されたローカルLAN内で

完全に、インターネットから切り離されたネットワークであれば、Proxy を使わないとクライアント側での名前解決が問題になります。インターネットに繋がっていない環境で、普通に DNS サーバを作ると、「q.hatena.ne.jp の IP アドレスは?」との問に「知らない」という答えが返ってきてしまいます(もしくは、タイムアウトする)。クライアント側で名前解決に失敗すると、「接続すべき IP アドレスが分からない」という事になるので、その時点で接続をあきらめてしまいます。TransFreeBSD さんの回答にある、

他に、DNSでリダイレクトする方法もありますが

というのは、この名前解決に失敗する状態を解決するために、どんな問い合わせに対しても、決まった IP アドレスを返す DNS サーバを用意することになります。

# って、どうやったら、そんな DNS サーバを作る事ができるか、知りませんが...

Proxy を使う方法であれば、名前解決をするのは Proxy サーバになるので、その心配は無くなります。極端な事を言えば、Proxy は、クライアントから渡された URL に対して、正しく名前解決をしなければいけない義務は無いので、どんな URL が来ても、特定のサーバに繋ぐ事は、原理的には可能です。

で、その具体的な方法に関して、TransFreeBSD さんが Apache httpd の mod_proxy の例を紹介していますが、Squid でも同様に出来ました。

Squid cacheを使ってWebブラウザのアクセス先URLを書き換える at siegmits.jp/blog
上記ページでは、Squid の url_rewrite_program を使って、URL のホスト部がプライベートアドレスやローカルホストの IP アドレス、内部でしか名前解決できないホスト名だった場合に、接続先の URL を変更しています。

実際に、これを参考にして、こんなものを作ってみました。

#!/usr/bin/perl

use strict;
use URI::URL;

$| = 1;

while (<STDIN>) {
 chomp(my $line = $_);

 my ($url_str) = split(/\s/, $line);
 my $url = new URI::URL $url_str;
 $url->host('www.example.com'); # 接続させたい Web サーバのホスト名や IP アドレス
 print $url->as_string . "\n";
}

このスクリプトを /usr/local/bin/rewrite.pl というファイル名として、squid.conf に下記の行を追記します。

url_rewrite_program /usr/local/bin/rewrite.pl

これで、どんな URL が来ても、特定の Web サーバに繋がりました。

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ