私のUbuntu12.04(正確な)ラップトップには3つのネットワークインターフェースがあります:
eth0
:インターネットに接続されることもある有線インターフェースwlan0
:インターネットに接続されることもあるワイヤレスインターフェース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
ルールを変更することもできますが、そのようなフープを飛び越えなくても可能だと思いました。
助言がありますか?
これは、すべてを偽装する非常に単純な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必要ありません。