[過去ログ] 【鉄壁】iptablesの使い方 3【ファイアウォール】 (995レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
700(7): 544 2008/11/24(月) 21:48:01 ID:qB2Gxz8P(1/2)調 AAS
NIC二枚刺して、一方はLANを通ってLAN内のルーターから外に
もう一方はグローバルIP持ってて直接外に
|-eth0(192.168.0.102)-ルーター-インターネット
PC-|
|-eth1(211.4.228.10)-インターネット
こんな構成になってるんだけど
eth0からインターネットに送信するときにeth1のIPアドレスがソースアドレスになっちゃいます。
eth0からLAN内にはちゃんと192.168.0.102がソースアドレスになります。
とりあえずiptables -A POSTROUTING -t nat -o eth0 -j SNAT --to-source 192.168.0.102
として、ソースアドレス設定してるですけど
tcpdumpで見てみるとDNSとかeth1のアドレスで尋ねにいってタイムアウトしてます。
そもそも、ifconfig見るとちゃんとeth0にIPアドレス設定されてるのに、なんでSNATが必要になるんでしょうか?
SNATしなくても済む方法ありますか?
701: 700 2008/11/24(月) 21:56:04 ID:qB2Gxz8P(2/2)調 AAS
追加です。
ping 66.249.89.99 -I eth0
とかすると、ソースアドレスはeth0のアドレスになってて問題なくpingは通ります。
703: 700=544 2008/11/25(火) 18:33:11 ID:+bzr+l5D(1/3)調 AAS
>>702
レスサンクスです
ポリシールーティングなのかわからないんだけど
>>544にあるように、UIDによってルーティングテーブルを分けてます。
mainテーブルはeth1がデフォルトになってて、
一部のユーザーはテーブル2を見て、eth0に振られます。
>>700の現象が起きるのはそのユーザーのみです。後出しですいません。
tcpdump見てると、domainのみeth1のアドレスでまず送って、その後eth0のアドレスで送ってます。
>>544で言ってた遅さの原因は最初のDNS問い合わせがタイムアウトしてるからのようです。
>・IPアドレスは、インターフェースに関連づけられる(が、他のインターフェース経由で送出されても良い)
ここを厳密にインターフェースに関連付けられればいいんですけど、SNATしかないんでしょうか?
705: 700 2008/11/25(火) 19:15:43 ID:+bzr+l5D(3/3)調 AAS
自分でも混乱してきたのでまとめ
table2を見てる特別ユーザーの場合
>>704の状態
ソースアドレスがeth1のアドレスになってしまって通信不可
>>704に加えてSNAT
基本的にソースアドレスはSNATで指定したアドレスになり通信できるが
DNSのみeth1のアドレスで問い合わせ後、SNAT指定のアドレスで問い合わせるので遅くなる。
708: 700 2008/12/26(金) 18:06:08 ID:ltPqHwfd(1)調 AAS
やりたいことは単純で、ユーザー毎に使うネットワークを分けたいだけなんですけどね。
宛先のみでは分けれないので静的なルーティングでは実現できず、fwmark使うしか思いつかなかったんです。
710: 700 2008/12/27(土) 00:58:36 ID:jUvzXagD(1/2)調 AAS
自分でsocketから書けばbindでIPアドレス指定することで
ルーティングで小細工しなくてもNICを使い分けれるんですね。知らなかった。
でもwgetとか普通のクライアントアプリならbindとか呼ばず、いきなりconnectじゃないですか?
そういう場合ってどうやってソースアドレス決定するんでしょう?
ルーティングテーブルでローカルネットワーク使うように設定しても(>>704のtable2)
ソースアドレスがグローバルIPになっちゃうんですよね。
##完全にiptablesの話じゃないな
#たしかに。板違いかも。
712(1): 2008/12/27(土) 07:44:29 ID:opgamkt1(3/3)調 AAS
IP通信の基本として、パケットには自分のIPアドレスが含まれる。(無いと通信できない)
srcIPとdstIPが別のnetworkになる場合、ルーティングを行う必要がある。
つまり、localのbindが${ip1}の状態で、$gw2に投げようとする時点で、ルーティングが必要になる。
localのbindが確定した段階で、別のgwに投げようとしても、localでroutingしない限り届かない。
>>700 の場合
アプリケーションが起動して、localのbindをanyでsocket作成
通信先を決定時に、local側IPアドレスをmainテーブルを元に生成(eth1のIPアドレス)
ルーティングテーブル選択ルールで、table 2を選択して、パケットを送出(211.4.228.0/24のネットワークの定義が無いので投げられない)
という動作になっているんじゃないかなー
多分、anyのbindがmainテーブル参照でsrcIP決定になるというのが、想定外の動作なのではないかと。
(なので、条件によって使用される他のテーブルにも、mainテーブル相当の内容を入れておくことが推奨される)
714: 700 2008/12/27(土) 19:04:19 ID:jUvzXagD(2/2)調 AAS
>>711
wgetにはbindの設定がありましたか。さすがwgetですね。wgetは例として悪かったです。
実際使いたいのはperlのLWP::UserAgentなんですけど、bindアドレスの設定はなさそうです。
>>712
パケットを生成するためにはsrcIPが必要で、ルート決定にはパケットが必要なんですね?
今自分がやろうとしてる、ルートによってsrcIP決定するという考え方が間違ってるんですね。
>>700ではsrcIPをmainから仮決定しているのでSNATで修正する必要があるのは当然だと。
ちなみに>>704の場合、一応パケットは送出されてます。でもsrcIPが間違ってるのでルーターに遮断されてると思われます。
>(なので、条件によって使用される他のテーブルにも、mainテーブル相当の内容を入れておくことが推奨される)
そうすると、srcIPが間違ってる限り、どのテーブル使ってもmainと同じルーティングになってしまいませんか?
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.299s*