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迷彩です。地域交通でも同じことが起こります。ルオ相互作用。
iptables
NATルールを次のように変更します。
$ iptables -t nat -A POSTROUTING ! -d 192.168.1.0/24 -j MASQUERADE
私の問題は解決しました!