web-dev-qa-db-ja.com

ネットワークインターフェイスから別のインターフェイスにパケットを転送する方法

私の問題は、私のLANであるeth2からインターネットにアクセスできるeth1にパケットを転送して、eth2がインターネットにアクセスできるようにすることです。ここでは私の構成です。

auto eth1
iface eth1 inet static
    address 192.168.3.1
    netmask 255.255.255.0
    network 192.168.3.0
    broadcast 192.168.3.255
    gateway 192.168.3.254

auto eth2
iface eth2 inet static
    address 10.101.26.1
    netmask 255.255.0.0
    network 10.101.0.0
    broadcast 10.101.255.255

iptables構成:

iptables -A FORWARD -i eth2 -o eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth2 -j ACCEPT

すでにコメントを外しているnet.ipv4.ip forward = 1 in /etc/sysctl.confそして1を/ proc/sys/net/ipv4/ip_forward

ゲートウェイ10.101.26.1としてLANに接続されたPCでテストした場合、インターネットにアクセスできないので、どうすればこれを解決できますか?

助けてくれてありがとう!よろしく

1
Ghilander

ある種のマスカレードステートメントが必要になります。この背後にある理由は、現在、eth2からeth1に到着するパケットが10.101.0.0/16アドレスによって識別されているためです。次に、これらの10.101.0.0/16パケットは、eth1(192.168.3.0/24)を介してネットワークを通過しようとします。これらのパケットはまだ192.168.3.1からのパケットとしてマスカレードされていないため、これは失敗します。

以下のような小さなスクリプトが役立つはずです。必要に応じて変更します。

#! /bin/bash

IPTABLES=/sbin/iptables

WANIF='eth1'
LANIF='eth2'
 
#カーネルでip転送を有効にする
 echo 'カーネルIP転送を有効にしています...' 
/bin/echo 1>/proc/sys/net/ipv4/ip_forward 
 
#ルールのフラッシュとチェーンの削除
 echo 'ルールのフラッシュと既存のチェーンの削除...' 
 $ IPTABLES -F 
 $ IPTABLES -X 
 
#マスカレードを有効にしてLANインターネットアクセスを許可する
 echo'IPマスカレードとその他のルールを有効にする... '
 $ IPTABLES -t nat -A POSTROUTING -o $ LANIF -j MASQUERADE 
 $ IPTABLES -A FORWARD -i $ LANIF -o $ WANIF -m state --state RELATED、ESTABLISHED -j ACCEPT 
 $ IPTABLES -A FORWARD -i $ WANIF -o $ LANIF -j ACCEPT 
 
 $ IPTABLES -t nat -A POSTROUTING -o $ WANIF -j MASQUERADE 
 $ IPTABLES -A FORWARD -i $ WANIF -o $ LANIF -m state --state RELATED、ESTABLISHED -j ACCEPT 
 $ IPTABLES -A FORWARD -i $ LANIF -o $ WANIF -j ACCEPT 
 
 echo '完了。' 
3
nod

あなたの説明に基づいて、私はあなたのPCがルーターの後ろにあり、eth1がルーターを介してインターネットに接続されていると仮定しています。ルーター上に192.168.3.1経由で10.101.0.0/16への静的ルートを作成して、そのネットワーク宛ての応答パケットをPCに転送できるようにする必要があります。

0
Larssend