web-dev-qa-db-ja.com

Linux着信トラフィックのソースIPアドレスを変更する

ポートXでWebサービスを実行しています。ローカルネットワークの外で実行することは意図されていませんでしたが、インターネット経由でアクセスしたいと考えています。したがって、すべての着信パケットのソースIPアドレスをローカルのアドレス(たとえば、192.168.2.100)に変更する必要があります。それ以外の場合、Webサービスはエラーで応答します。

だからここに私が必要なものがあります:

パブリックIP Xを使用して自宅のコンピューターからサーバーのパブリックIPアドレスYにパケットを送信する場合、送信元IPアドレス(この場合はX)をローカルアドレス(192.168.2.1など)に変更する必要があります。 。その後、パケットは同じサーバーのポート80で実行されているWebアプリケーションに渡されます。

4
Ka Rl

OK、今私はあなたが何を望んでいるか理解していると思う。これは非常に特殊なケースであり、以前に投稿した通常のport-forwardingアプローチとは異なります(以下を参照)。次のルールはそれを行うべきです。

着信パケットのSNAT

私は以下を想定しています:

  • <x>:サーバーのパブリックIP
  • <y>:クライアントのパブリックIP
  • <a>:サーバーの内部IP(192.168.2.1
  • <b>:クライアントの「偽装」IP(192.168.2.100
  • <if>:外部インターフェース(つまり、eth0

SNATのみ

このルールは、パケットの送信元アドレスを変更します。

iptables -t nat -A INPUT -p tcp -d <x> --dport 80 -s <y> -j SNAT --to-source <b>

DNATとSNATの組み合わせ:

これらのルールは、パケットの送信元アドレスと宛先アドレスを変更します。

iptables -t nat -A PREROUTING -i <if> -p tcp -d <x> --dport 80 -s <y> \
    -j DNAT --to-destination <a>:80
iptables -t nat -A INPUT -p tcp -d <a> -s <y> --dport 80 \
    -j SNAT --to-source <b>

[〜#〜] accept [〜#〜]フィルタテーブルのパケットを忘れないでください。


比較のための通常のDNATポート転送ルール(SNATなし):

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8080 \
    -j DNAT --to-destination 192.168.2.1:80

これにより、外部インターフェースの着信パケット(この例では8080)のポートeth0が内部ホスト192.168.2.1にポート80に転送されます。 interfaceprotocoldportおよびto-destinationを設定に置き換えます。

このルールは、変更されたパケットを受け入れます。

iptables -A FORWARD -i eth0 -p tcp -d 192.168.2.1 --dport 80 -j ACCEPT
6
rda

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport *$srcPortNumber* -j REDIRECT --to-port *$dstPortNumber*

Yours NICがeth0にない場合、-i属性を変更します

編集#1

--dportおよび--to-portの場合、exmのip adress whitポートを設定できます:192.168.0.1:80

1
Gruja