GNU/Linux >> Linux の 問題 >  >> Linux

wlan0 から eth0 へのブリッジ

解決策 1:

Wi-Fi をブリッジするには iw を使用できるインターフェイス 4addr を有効にするツール 同様に:

# iw dev <wifiInterface> set 4addr on

例:

# brctl addif <bridgename> <wifiInterface>
can't add <wifiInterface> to bridge <bridgename>: Operation not supported

# iw dev <wifiInterface> set 4addr on
# brctl addif <bridgename> <wifiInterface>

これで動作するはずです。以下を使用してブリッジを表示できます:

# brctl show

解決策 2:

更新

linux-ath5k-devel のこのスレッドによると、無線 (クライアント別名ステーション モード) と有線インターフェイスの間をブリッジすることはできません。

NAT のセットアップ

代わりに NAT を設定する必要があります:

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

IP の割り当て

次に、自分自身に IP アドレスを割り当てる必要があります:

ifconfig eth0 10.0.0.1 netmask 255.255.255.0 up

dhcp デーモンをインストール

dhcp サーバーをインストールし、次のテキストを構成ファイル (/etc/dhcpd.conf など) に追加します。

subnet 10.0.0.0 netmask 255.255.255.0 {
    range 10.0.0.100 10.0.0.120;
    option routers 10.0.0.1;
    option domain-name-servers the-ip-address-you-have-in-etc-resolv.conf;
}

dhcpd を開始

次に起動します /etc/init.d/dhcpd start

それだけです!

非稼働ブリッジ設定に関心がある場合のみ、以下をお読みください

brctl addbr mybridge
brctl addif mybridge eth0
brctl addif mybridge wlan0

まず、ブリッジ インターフェースを作成します。任意の名前 mybridge を選択します 次にインターフェースを追加します。

新しい IP アドレスを要求する必要があります (これは、ブリッジ デバイス自体の有効な IP を取得する場合にのみ必要です):

dhclient -d mybridge

解決策 3:

wlan と 4addr のブリッジ:

wlan0 のブリッジは面倒です。通常、これをブリッジ インターフェイスに追加することはできません (brctl は「許可されていない操作」を返します)。また、VirtualBox の「ブリッジされた」フィルターを使用すると、ARP と DHCP の競合が大きく混乱します。これは、802.11 フレームにデフォルトで 3 つのアドレスしか含まれていないことが原因です。ワイヤレス デバイス (ラップトップと AP) と最終受信者 (イーサネットなど) の両方の MAC アドレスです。考えられる発信者は 1 人だけであると常に想定されています。

802.11 は 4 番目の発信者の MAC アドレスを運ぶことができ、これはリピータによって WDS モードで使用されます。この機能は iw を使用して Linux でも有効にできます。このモードを有効にすると、wlan0 をブリッジ インターフェースや VirtualBox ブリッジ ネットワークで使用できるようになります。

iw dev wlan0 set 4addr on

ただし、4addr が有効になっていると、AP によって完全に無視される可能性があります。アソシエーションは成功しますが、すべてのデータ フレームがイーサに消えます。これはセキュリティ上の理由による可能性があります (送信元 MAC アドレスをスプーフィングするのは非常に難しいためです。そうです) 私のルーター (OpenRG を実行している) では、ワイヤレス AP インターフェースの「WDS」モードを有効にする必要があります。ラップトップの MAC アドレスを取得し、LAN ブリッジに追加します。 4addr パケットが機能するようになりました。

ただし、これには別の問題があります。ルーターは、ラップトップからの 3 つのアドレスのパケットを拒否するようになりました。これはかなり不便です (WLAN ネットワークが変更されるたびに 4addr を切り替える必要があります)。回避策は、ラップトップで、同じデバイスにリンクされているが別の MAC アドレスを持つ 2 つ目のワイヤレス インターフェイスを追加することです。最初に以前の構成を元に戻します:

iw dev wlan0 set 4addr off

次に、別の MAC アドレスを持つ 2 番目のインターフェース (名前は任意に選択) を追加します。

iw dev wlan0 interface add wds.wlan0 type managed 4addr on
ip link set dev wds.wlan0 addr <addr>
ip link set dev wds.wlan0 up

ここでは、ルータに設定されている WDS デバイス アドレスと一致する必要があります。それ以外は、任意の有効な MAC アドレスにすることができます。 wlan0 の元の MAC は、「通常の」使用のために残ります。

wlan0 と wds.wlan0 の両方を同時に使用することは可能です。ただし、異なる AP ではなく、同じ AP への関連付けを 2 回テストしただけです。少なくとも同じチャンネルにいる必要があると思います.

VirtualBoxがWiFiを「問題なく」ブリッジできるのに、なぜこれを使用するのかと尋ねる人もいます。答えは、VirtualBox は仮想マシンの MAC アドレスを送信しないということです。むしろ、MAC 層でも NAT を実行します。 – 2014-08-22

ダイレクト ワン ブリッジ

特定の状況下では、wlan_kabel を使用することもできます。パケット ソケットを使用して、wlan* デバイスとイーサネット デバイスを直接ブリッジします。ただし、wlan_kabel で一度にブリッジできる MAC は 1 つだけです。 WLAN デバイスの元の MAC のみが使用されるため、アクセス ポイントによって禁止されるという欠点はありません。あなたの場合、これは wlan0 が1つのVMでのみ使用でき、ホストでさえ使用できないことを意味します。ここで wlan_kabel を取得できます。これは macvlans ソリューションに似ています。

ipvlan によるブリッジ

IP Vlan にはブリッジの制限がなく、ネットワークをブリッジするために使用できます。使用方法の詳細については、こちらを参照してください

仮面舞踏会の代替

代わりに iptables-masquerade と ip_forward を使用して Linux ルーティングを使用してブリッジを実現できますが、前述のように、これには ip_forward を有効にする必要があり、Linux がルーターのように動作するようになります。セキュリティ上の問題が発生する可能性があるため、慎重にセットアップする必要があります。

# bridge setup
brctl addbr br0
ifconfig br0 10.10.20.1/24 up
 
# enable ipv4 forwarding
echo "1" > /proc/sys/net/ipv4/ip_forward
 
# netfilter cleanup
iptables --flush
iptables -t nat -F
iptables -X
iptables -Z
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
 
# netfilter network address translation
iptables -t nat -A POSTROUTING -o wlan0 -s 10.10.20.0/24  -j MASQUERADE

インターフェイス br0 は wlan0 ネットワークにアクセスできます

重要かつ関連

また、非常に重要なことですが、ifconfig、brctl などの廃止された非推奨のコマンドを使用しないでください。 、 等々。 iproute2 スイートには、仮想インターフェイス (以前は openvpn を使用する必要があったもの) のセットアップやブリッジの作成など、これらすべてのコマンドが含まれています。 IP でブリッジを設定する方法がわからない場合は、ここに進みます

  ip tuntap add tap0 mode tap user root 
  ip link set tap0 up
  ip link add br0 type bridge
  ip link set tap0 master br0
  ip link set eth0 master br0
  ip addr add 10.173.10.1/24  dev br0
  ip link set br0 up

この一連のコマンドを使用して、tap0 と呼ばれる仮想インターフェイスを作成し、次に br0 と呼ばれるブリッジを作成します。次に、eth0 と tap0 をブリッジにスレーブ化し、それに 10.173.10.1 の IP アドレスを割り当てて、すべてを起動します。インターフェイスを起動する 3 つの個別のインスタンス (tap0、eth0、および br0 用) が必要です。

これを機能させる秘訣は、proxy.arp を使用することです。これにより、PC (VM/Linux コンテナー/ネットワーク名前空間ではない) が代わりに ARP クエリに応答できるようになります。

つまり、ハードウェア インターフェイスと仮想インターフェイスの間で IPv4 転送を使用することにより、VM/LXC/NNS を物理インターフェイスであるかのように LAN に接続できると考えていますが、これは正しくありません。 LAN の動作を真に可能にする基本的な ARP トラフィック。問題は、IPv4 トラフィックを正しく転送する場合、VM/LXC/NNS が機能するように ARP トラフィックも転送するにはどうすればよいかということです。秘訣は、proxy-arp を使用することです。

それに対する完全な答えは、Bohdi Zazen のブログにあり、そのタイトルは明らかに、ワイヤレス カードのブリッジです。彼は廃止されたパッケージ、uml-utilities を使用して、コマンド tunctl を使用して仮想インターフェイスを作成します。これは、彼が uml-utilities を使用する唯一のコマンドであるため、パッケージのダウンロードを安全に無視して、コマンド I を使用できます。上に書いたように、tap または tun インターフェイスを作成します。好きな方を使用して、それに応じてコマンドを変更してください。次に、LXC の veth ペアを作成し、tap0 と veth0 の間にブリッジを作成します。 br0 と呼ばれるこのブリッジは、Bohdi Zazen によって記述された単純な tap0 インターフェイスの代わりに、proxy-arp を使用する必要があります。

ソース:askubuntu.com、nullroute.eu.org、firejail.wordpress.com、superuser.com

解決策 4:

APがあなたにとってどれほど意味があるかによって異なります:

1) 既知のリンク層アドレスを持つ、あなたからのパケットのみを表示したい場合があります (したがって、ブリッジされたパケットではありません)2) 実際にはさらに賢く、どの IP アドレスがどのリンク層アドレスに属するべきかを認識している可能性があります (原因:DHCP を認識して検査します)

1+2 が両方とも当てはまる場合、実際には IP NAT、DHCP などのものが必要です..

ただし、1) のみが該当する場合は、リンク層アドレスを偽造し、ここで説明するように、反対方向の正しいアドレスに逆マッピングすることができます:

https://wiki.debian.org/BridgeNetworkConnections#Bridging_with_a_wireless_NIC

解決策 5:

他の回答で説明されている4addrは、アダプター/ドライバーでサポートされている場合、確かに最良の方法ですが、すべてがサポートされているわけではありません。 NAT はいくつかの場合に機能する可能性がありますが、LAN で双方向に適切な通信を行うには問題が生じます (たとえば、プリンターを接続したり、NAT の反対側にある他の IoT デバイスにアクセスしたりします)。ブロードキャスト/マルチキャスト (自動検出、ボンジュールなど) に依存するものはすべて、NAT を介して失敗します。

別の方法は、https://wiki.debian.org/BridgeNetworkConnectionsProxyArp で説明されているように、ARP プロキシ (parprouted) を使用することです。プリンター用の Raspberry Pi でこれをセットアップしましたが、魅力的に動作します (post-up に 10 秒間のスリープを追加しました)。 最初に IP アドレスを取得するためのコマンドは、古い RPi の遅さに関係している可能性があります...)


Linux
  1. 特定のインターフェースで cURL を使用する方法

  2. Linux で eth0 インターフェース名は何を意味しますか?

  3. インターフェイス eth0 が稼働しているかどうかを確認します (構成済み)

  1. Debian / Ubuntu/LinuxMintでネットワークを構成する

  2. wlan0のステータスを見つける方法は?

  3. Linux ブリッジがパケットを転送しない

  1. Linux –宛先ポートに基づいて異なるインターフェースでトラフィックを出力しますか?

  2. LinuxボックスでARPプロトコルを無効にする

  3. Virtualbox クローン後の起動時に eth0 が起動しない