web-dev-qa-db-ja.com

iptablesルールを使用してトラフィックを転送する方法は?

私はiptablesを初めて使用し、この問題の適切な解決策を見つけることなく、数日間Google検索を行っています。

無制限にインターネットにアクセスできるパブリックIPアドレス(たとえば192.0.2.1)を持つコンピューターAがあります。コンピューターAにのみアクセスできるプライベートIPアドレス(192.168.1.1)を持つ別のコンピューターBがあります。iptablesを使用してBからAを介してインターネットにネットワークトラフィックを転送するにはどうすればよいですか? Sudoでapt-getを使用するには、http、ftp、およびhttpsを使用する必要があります。

どちらのコンピューターもUbuntulinuxを実行しています。 Squidを使ってみましたが、やらなければいけないことには複雑すぎると思います。

5
ProbablePattern

ネットワークが次のようになっていると仮定すると、これで問題が解決すると思います。
インターネット<----> コンピューターA <----> コンピューターB

ノート:
<external interface>は、コンピューターAでインターネットに接続されているインターフェース(eth0p1p1など)です。 <internal interface>は、コンピューターBに接続されているコンピューターAのインターフェースです。

これらのコマンドは、コンピューターA(インターネットにアクセスできるコンピューター)でroot(su -内)として実行する必要があります。

EXT=<external interface>
INT=<internal interface>
echo 1 > /proc/sys/net/ipv4/ip_forward #Tell the system it is OK to forward IP packets
iptables -t nat -A POSTROUTING -o $EXT -j MASQUERADE
iptables -A FORWARD -i $EXT -o $INT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i $INT -o $EXT -j ACCEPT
ip addr show $INT

ip addrコマンドの出力で、inet(またはIPv6を使用している場合はinet6)で始まる行を見つけます。次のコマンドのその行のIPアドレスをrootとして使用しますコンピューターB

ip route add default via <put ComputerA's internal IP address here>

ここで、コンピューターBping google.comを実行するか、ブラウザーにWebページを読み込もうとして機能するかどうかを確認します。

コンピューターAに変更を保存する場合は、rootとして次のコマンドを実行します。

apt-get install iptables-persistent
/etc/init.d/iptables-persistent save

保存したルールを起動時に復元する方法が正確にわかりません。他の誰かが何か提案できますか?起動後は毎回/etc/init.d/iptables-persistent reload(rootとして)を実行するように機能するはずですが、それは面倒です。

コンピューターBを作成するには、常にコンピューターAを使用します。デフォルトゲートウェイでは、DHCPをコンピューターAにインストールする必要がありますが、これについては説明しません。この答えで。

2
BenjiWiebe

保存したルールを起動時に復元する方法が正確にわかりません。他の誰かが何か提案できますか?起動するたびに/etc/init.d/iptables-persistentreload(rootとして)を実行するように機能するはずですが、それは面倒です。

/etc/rc.localなどに変更を追加するだけです

コンピューターBをデフォルトゲートウェイとして常にコンピューターAを使用するようにするには、コンピューターAにDHCPをインストールする必要がありますが、この回答では取り上げません。

アドレスを静的に設定する

1
DeanLinux

プライベートIPアドレスとパブリックIPアドレスの間のゲートウェイとして機能するには、ネットワークアドレス変換(NAT)を実行する必要があります。 iproute2(NATを実行できるもう1つの一般的なLinuxソフトウェアパッケージ)の有無にかかわらず、iptablesを使用してNATを実行する方法についてのチュートリアルがオンラインにたくさんあります。

0
Spiff

私はこれを行うためにイカを使用しました、それは強力で複雑な獣ですが、イカは本当にキャッシング用です。次に、Host1をキ​​ャッシングプロキシホストとして使用しますが、それを使用することはできますが、ポイントが不足しています。私はあなたが以前IPTABLESでやろうとしていたことをしました(ipchainsの直後に戻ってきました!)。 IIRCには、一致する着信パケットを他のルートに転送するルールを作成することが含まれていました。ここにはたくさんの情報があります(上記のリンクにenuf情報がない場合)。

http://www.linuxtopia.org/Linux_Firewall_iptables/c951.html

私はVPNを使用することは本当に単純な解決策であるとは信じていませんが、あなたがやろうとしていることの要点を見逃しているので、最初に適切な方法でそれを行ってください。 VPNは、別のホストへのトラフィックを暗号化するのに適しています。

0
DeanLinux