web-dev-qa-db-ja.com

NAT(インターネット接続の共有)複数のパブリックインターフェイス間の切り替え

私のUbuntu12.04(正確な)ラップトップには3つのネットワークインターフェースがあります:

  1. eth0:インターネットに接続されることもある有線インターフェース
  2. wlan0:インターネットに接続されることもあるワイヤレスインターフェース
  3. vboxnet0:別のコンピューター(実際にはホストオンリーモードのネットワークを備えたVirtualBox仮想マシン)に接続された有線インターフェイス(実際にはVirtualBox仮想インターフェイス)

iptablesを使用して、NAT/IPマスカレードを設定し、アップしているインターネット接続(両方がアップしている場合は有線を優先)を他のコンピューターと共有したいと思います。

以下は、eth0が接続されています:

echo 1 | Sudo tee /proc/sys/net/ipv4/ip_forward &&
Sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE &&
Sudo iptables -A FORWARD -i eth0 -o vboxnet0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT &&
Sudo iptables -A FORWARD -i vboxnet0 -o eth0 -j ACCEPT

有線から無線に切り替えると、明らかに機能しなくなります。

私は試した:

echo 1 | Sudo tee /proc/sys/net/ipv4/ip_forward &&
Sudo iptables -t nat -A POSTROUTING -o '!vboxnet0' -j MASQUERADE &&
Sudo iptables -A FORWARD -i '!vboxnet0' -o vboxnet0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT &&
Sudo iptables -A FORWARD -i vboxnet0 -o '!vboxnet0' -j ACCEPT

しかし、それは機能しませんでした。ネットワークマネージャーのスクリプトを実行して、インターフェイスが上下するたびにiptablesルールを変更することもできますが、そのようなフープを飛び越えなくても可能だと思いました。

助言がありますか?

7
Richard Hansen

シンプル

これは、すべてを偽装する非常に単純なiptablesルールセットです。これは、多くの簡単なセットアップで機能します。ボックスが本格的なルーターとして機能している場合は機能しません—コンピュータを離れるトラフィックallトラフィックをNATするという厄介な習慣が潜在的にあります。

iptables -A POSTROUTING -o eth+ -t nat -j MASQUERADE
iptables -A POSTROUTING -o wlan+ -t nat -j MASQUERADE

フル

単純なソリューションが機能しない場合、または構成がより複雑な場合は、このルールセットが役立つ可能性があります。

NATIF='vboxnet+'
MARK=1
iptables -A PREROUTING -t mangle -i $NATIF -j MARK --set-mark $MARK
iptables -A POSTROUTING -o eth+ -t nat -m mark --mark $MARK -j MASQUERADE
iptables -A POSTROUTING -o wlan+ -t nat -m mark --mark $MARK -j MASQUERADE

vboxnet*インターフェイスを介して着信するパケットにマークを付け、その後、eth*またはwlan*から発信するパケットをマークセットでマスカレード(SNAT)します。

また…

iptablesルールに加えて、パケット転送を有効にして、ホストコンピューターをルーターに変える必要があります。プット:

net.ipv4.ip_forward=1

/etc/sysctl.confで、次のように言います

Sudo sysctl -p /etc/sysctl.conf.

または:

echo 1 | Sudo tee /proc/sys/net/ipv4_ip_forward

ゲストには、ホストの外部インターフェイスを介してパケットをゲートウェイするデフォルトルートも必要です(この場合、ホストオンリーモードが機能しない可能性があります)。ルーティングテーブルを確認します(これはゲストOSによって異なります)。

また、wiresharkまたはtsharkをインストールし、それらを使用してパケットを調べます。このような一般的なネットワークの問題を解決するためのより良い方法はありません。

個人的には、ゲストを変更してブリッジモードネットワークを使用し、ホストの両方のインターフェイスを使用できるようにすることをお勧めします。次に、ルーターのDHCPサービスを使用して独自に接続し、独自にローカルアドレスを取得できます。いいえNAT必要ありません。

4
Alexios