• 締切済み

パケットの流れが指定先と違う?

気になったのですが。 linuxサーバのeth0とeth1に異なるグローバルIPアドレスが振り、 iptablesで両方のsshへのアクセスを許可しているのですが、 sshの通信でどちらのIPアドレスを指定してもパケットがeth0側に流れるようなのです、これはなぜでしょうか? クライアントはteratermを使用しており、パケットの確認には、 tcpdump -i eth0又はeth1 port 22を使用しております。 GATEWAYDEVはファイルで明示的に指定しておりません。

みんなの回答

  • kusa_mochi
  • ベストアンサー率76% (1599/2089)
回答No.1

これは回答というよりアドバイスに近いのだが・・・ route print でルーティングテーブルをまず確認してみては。 個人的には、Default Gateway無しでどの様に相手側グローバルIPへパケットを送り返しているのか興味がある。 明示的に「このIPアドレスにはethxを使う」としていなければ、それ以外のパケットは原則としてDefault Gatewayに回されると思うのだが・・・ 相手がNICの繋がっている同一セグメント内ならルーティングテーブルのお世話にならなくても、パケットの送り先を判断できると思うが。 #GATEWAYDEVなのでDebianなのかな? 当方にはDebian環境が無いので知らないが、暗黙のルールみたいなものがあるのかも

FUJI_KATSU
質問者

お礼

返答が遅れてすみませんでした。 OSはRedhatのes4です。 routeコマンドではデフォルトゲートウェイがeth0になっています。 あえてeth1を指定し、routeコマンドや実通信で反映されたことを 確認した直後でも、該当記述を消去しnetworkをリスタートすると 再びeth0になります。 無指定のため、何かの送受信のタイミングで逆転することがあるの では? と確認していましたが今のところ確認できません。 何かルールが無いかとググってましたが、このてのことは見つけるのが 難しいですね。 このサーバは両nicのアドレスが同一ネットワークセグメント上にあり、 同じgatewayアドレスを指定しているのですが、 つい最近、iptablesでsmtpのみpostroutingしてeth1から送信する設定が 完全ではなかったことが発覚しました。 ルールの誤りではないようで、受信先で送信元のIPアドレスは意図通り になっていたのですが、sysctl.confでarpのパラメータを有効にし忘れて しまい、その結果arpテーブルの両nicのMACアドレスがeth0のものになって いたということで・・・ パラメータを有効にして反映後に通信することでarpテーブルは正常に なりましたが、これが原因でおかしくなっていたかどうかの検証は、 急な案件中のため保留しています。 一段落したら再開しようと思います。 以上です。 長文失礼しました。

関連するQ&A

  • Fedora6でポートフォワードできなくなった

    Fedora4でできていたポートフォワードの設定がFedora6で できなくなってしまいました。 以下のような環境です。 PC1 Eth0:グローバルIP Eth1:192.168.10.254 PC2 Eth0:192.168.10.253 PC2でApacheを起動して、PC1の80番ポートをPC2にフォワード したいのです。 そこで以下のようなIptablesを設定しました。 iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.10.253 しかし、PC1のグローバルIPアドレスにブラウザからアクセスしても 一向に表示されません。 PC2でtcpdumpを使って80番ポートを監視しながら確認したのですが、 パケットは観測されませんでした。 [pc2]$ sudo tcpdump port 80 fc4のときはこのようなトラブルに遭遇しなかったのですが、 なにかやり方が変わったのでしょうか? お助けください。

  • iptablesによるルーティング

    eth0とeth1があり、それぞれ異なるサブネットマスクのネットワークがあります。 デフォルトゲートウェイがeth1側に設定されていてeth0からきたパケットが戻ってきません。 これをiptablesにてeth0から入ってきたパケットはeth0へ返す、eth1から入ってきたパケットはeth1へ返すということがしたいのですが、わかりません。 ちなみにIPアドレスがころころかわるので、スタティックルートに追加する方法以外でiptablesにインターフェースを指定するような形が理想です。

  • tcpdumpで複数のデバイスを指定するには?

    今日は。 RedHat9でのtcpdumpでppp0かeth0へのパケットをキャプチャしたいのですが上手くい きません。 どのうように記述したらいいのでしょうか? #rpm -qa |grep tcpdump tcpdump-3.7.2-7.9.1 # /usr/sbin/tcpdump -i \( ppp or eth0 \) -a -vvv \( dst port 110 and dst host yy.mine.nu \) tcpdump: ioctl: No such device

  • iptablesでのパケットフィルタリング

    iptables初心者です。 iptablesのパケットフィルタリングで、 プライベートアドレス xxx.0.0.0/255.0.0.0 グローバルアドレス yyy.yyy.0.0/255.255.0.0 からのみ、HTTP、FTP、SSHでの接続を許可したいのですが、どのように記述したらよいかわかりません。 # iptables -A OUTPUT -f -d 192.168.1.1 -j DROP この様な感じで、正しい記述方法をご教授ください。

  • libpcap のフィルタが正常動作しない

    Linux 2.4.21-37.ELsmp、gcc 3.2.3で、libpcap-0.9.4 と tcpdump-3.9.4 のソースの tar ball をコンパイルしました。パケットの取得はできるのですが、フィルタを指定すると動作しません: (X)tcpdump -i eth1 'ip[12]=0x0a and ip[13]0x00 and ip[14]=0x00 and ip[15]=0x01' → 全くキャプチャ出来ない (△)tcpdump -i eth1 'host 10.0.0.1' → キャプチャ出来るが、なぜか destination address が 10.0.0.1 のものだけ取れる (X)tcpdump -i eth1 'dst host 10.0.0.1' → 全くキャプチャ出来ない 自作のソースで、 pcap_loop()/packet_handler(...pkt_data...) memcpy( &ip_src, &pkt_data[26], 4 );、memcpy( &ip_dst, &pkt_data[30], 4 ); すると、正常にアドレスを参照できます。 ところが、pcap_compile()/pcap_setfilter() を使うと、フィルタが正常に認識されないのです。 どうしたらよいのでしょう・・・?

  • Sambaとファイヤーウォールのことで

    Sambaでファイルサーバーをたてようと思い、 DebianでLinuxをはじめてみました。 クライアント側のPCはWindowsXP Proです。 外部に公開するような用途には使わないので (というかまだ知識もないですし) 内部だけのでアクセスができればいいと考えており、 Iptablesでファーイヤーウォールの設定をしています。 基本的には外部からと内部からのパケットは破棄し、 ping・samba・ssh・ループバックアドレスは許可するように設定しました。 Iptablesの設定をする前は、Sambaで設定したフォルダに しっかりとアクセスできていたのですが、 iptablesを稼動させると、アクセスできなくなってしまいます。 SSHはiptablesを稼動させてもアクセスできているんです。 Sambaの使用するポートも udp 137 138 tcp 139 445はあけているのですが・・・ アドバイス頂けたら幸いです。

  • iptablesでダイナミックDNSを指定したい

    iptables でsshなどの接続可能な接続元の IPアドレスを指定したいのですが 指定したい先が固定IPではないので ダイナミックDNSを利用して指定したいです。 試しにそのまま以下のように指定してやると iptables起動時のダイナミックDNSのIPアドレスに対しては動作するようですがIPが変更された場合に対応できていないようです。 -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -s xxx.dyndns.org -j ACCEPT たとえば 1.1.1.1から2.2.2.2にダイナミックDNSの参照先が変わった場合 でも 1.1.1.1の時にiptablesを起動開始すると いつまでたっても1.1.1.1しか許可してくれません。 なおiptablesを再起動するときちんとその時点の値を認識してくれるので 2.2.2.2になった後再起動すれば2.2.2.2でアクセス可能になりますので 毎時再起動してやるとかで対応できなくもないのですが 瞬間的にとはいえiptablesを毎時止めるのは抵抗があります。 iptablesを再起動しなくてもダイナミックDNSのIPを反映させる方法は何かないでしょうか? 以上よろしくお願いいたします。

  • どうやらフォワーディングされているようです

    お世話になっております LINUXで環境を構築していまして、困ったことがあります。 クライアントからのssh通信をLINUXサーバの2つのinterfaceへと行いたいです。 ロケーションを以下に示します「↓(矢印表記はLANケーブル)」 ------------- |クライアント | ------------- ↓(seg3) ------------- (seg2) |L3スイッチ |→→→→→↓ ------------- ↓ ↓ (seg1)        ↓ ------------- ↓ |サーバ    |←←←←←← ------------- L3SWからのseg1,seg2は各々サーバのeth1,eth2へ接続されています。 要件としましては、クライアントからseg1経由のssh接続、 seg2経由のssh接続を実現したいです。 通信自体はクライアントからサーバのポート(eth1,eth2)へ通信はできたみたいですけど tcpdumpで確認したところ、戻りのルートがサーバでフォワーディングしているようです。 つまり、以下のようになります。 クライアント→サーバeth1→サーバeth2→クライアント クライアント→サーバeth2→サーバeth1→クライアント 条件としては、戻りの通信経路を各々同一にしたいのですが、どのような設定すればよろしいでしょうか 例:つまり、以下のような通信を行いたいです。 クライアント→サーバeth1→サーバeth1→クライアント クライアント→サーバeth2→サーバeth2→クライアント ◆環境 OS:Red Hat Enterprise Linux ver5 ・eth1,eth2にGWを設定  GWはL3SWの接続先ポートを指定する ・L3は各ポートでVLANを切り、VLAN同士でルーティングさせている ・ping クライアント→L3SW(seg2port) OK クライアント→L3SW(seg1port) OK クライアント→サーバ(seg2port) OK クライアント→サーバ(seg1port) OK ・フォワードの設定 /proc/sys/net/ipv4/ip_forward 0 おわかりの方がいらっしゃいましたら、お手数ですがご教授願います。

  • 外部サーバにアクセスするためのNICを指定したい

    NIC二枚差し(eth0とeth1)のLinuxサーバがあって、 eth0とeth1の繋がっているネットワークが、 それぞれ別系統でインターネットに接続されているとします。 普段はeth0を経由してインターネットに接続するので、 routeコマンドでdefault gatewayをeth0側のルーターに指定してます。 ここからが質問です。 あるインターネット上のサーバだけ例外的にeth1経由でアクセスしたい場合は、 どこに何を記述するのが適切ですか? routeコマンドで、 # route add -host サーバのホスト名 gw ルーターのIPアドレス metric 1 eth1 とかやってみたものの、うまくいきません。 iptablesかなとも思ってますが、 何をどう記述したらいいのかわからず困ってます。

  • Linuxルータの構築

    CentOS5.4にて、Linuxルータを構築しようと考えています。 そこで、NICを新たに1枚購入して構築を進めているのですが、うまくいきません。 ネットワークの構成は、 外部  ------ ルータ(192.168.1.1)--(192.168.1.5)linuxルータ(192.168.2.1)--クライアント(192.168.2.3) 設定方法は、CentOSのGUIで行ったもので、外部側 (eth0)は 上記のipとデフォルトゲートウェイ(192.168.1.1)を設定し、内部側(eth1)は、上記のipとデフォルトゲートウェイに(192.168.1.5)を設定しています。 そして、iptablesには、 ----- setiptables.sh ----- external_ip='192.168.1.0/24' internal_ip='192.168.2.0/24' my_external_ip='192.168.1.5' my_internal_ip='192.168.2.1' eth_external='eth0' eth_internal='eth1' iptables -t filter -F iptables -t nat -F iptables -t mangle -F iptables -t filter -X iptables -t nat -X iptables -t mangle -X iptables -t nat -A POSTROUTING -o $eth_external -s $internal_ip -j MASQUERADE iptables -t nat -A POSTROUTING -o $eth_internal -s $external_ip -j MASQUERADE --------- このように設定しています。 この環境でクライアントからpingしてみたところ、192.168.1.5には到達できるのですが、外部には到達することができません。 つたない説明で申し訳ありませんが、アドバイス頂ければ幸いです。 分かりにくいところがあれば言っていただければ、補足説明させていただきます。 よろしくお願いします。