外部IPの代わりに定義されたローカルIPを使用する方法

外部IPの代わりに定義されたローカルIPを使用する方法

Gentoo Linuxサーバーがあります。サーバーは内部と外部の2つのネットワークに接続されています。

Internal network ip: 192.168.1.200
External network ip: 192.168.0.2

サーバーから独自に要求を試みると、外部ネットワークIPを使用します。 Wgetを使用してnginxに接続すると、次のようなロギングが提供されます。

server ~ # tail -n 1 /var/log/nginx/error_log
192.168.0.2 - - [27/Aug/2014:19:04:42 +0300] "GET / HTTP/1.1" 200 5 "-" "Wget/1.14 (linux-gnu)"

それにもかかわらず、私は192.168.1.200に直接接続しました。

server ~ # wget http://192.168.1.200/

ルーティングテーブル(メトリックは外部ネットワークでは高いが無視されるようです): IPパスの表示

server ~ # ip route
192.168.0.0/30 dev wan  scope link  metric 20 
192.168.1.0/24 dev lan  scope link  metric 10 

IPルート取得:

server ~ # ip route get 192.168.1.200
local 192.168.1.200 dev lo  src 192.168.1.200 
    cache <local> 

192.168.0.2の代わりに192.168.1.200を使用してこのシステムを自分で接続するにはどうすればよいですか?

答え1

実行しているすべてのプログラムでこの問題が発生した場合は、サーバーファイアウォールの規則を確認する必要があります。NAT外部ターゲットにのみ使用されていることを確認してください。広範なルールがある場合、ルーティングテーブルは意味がありませんNAT

ファイアウォールルールを変更したら、オプションを使用して使用するインターフェイスを選択wgetできます。--bind-address

wget --bind-address=192.168.1.200 http://192.168.1.200/

~からwgetドキュメント:

'--バインディングアドレス=アドレス'

クライアントTCP / IP接続を確立すると、ローカルコンピュータのADDRESSにバインドします。 ADDRESS はホスト名または IP アドレスで指定できます。このオプションは、コンピュータが複数のIPにバインドされている場合に便利です。

あなたはそれを使用することができます.wgetrcファイルを永久に作成できます。

答え2

iptables私の質問に対するコメントの1つで@Patrickが述べたように、NATルールに問題があります。

  • イーサネット0: 内部ネットワーク、192.168.1.200
  • eth1:外部ネットワーク、192.168.0.2

私のNATルールは次のとおりです。

$ iptables -t nat -A POSTROUTING ! -o eth0 -j MASQUERADE

これは、デバイスに送信されるすべてのトラフィックがインターフェイスではないことを意味します。イーサネット0迷彩です。地域交通でも同じことが起こります。ルオ相互作用。

iptablesNATルールを次のように変更します。

$ iptables -t nat -A POSTROUTING ! -d 192.168.1.0/24 -j MASQUERADE

私の問題は解決しました!

関連情報