wlan0からeth0へのブリッジング


25

Arch Linuxでは、eth0(ブリッジルーターに接続)がwlan0から受信した接続を共有するようにしたいと思います。


8
質問やタイトルに「[解決済み]」を入れないでください。答えを受け入れることは、問題が解決したことを示す正しい方法です。質問がメインリストに表示される方法を変更し、正解としてマークした回答に緑色のチェックマークを付けます。
ザイファー

1
誰もこのページをめちゃくちゃにしていないなら、私はそれを感謝します。問題がある場合は、私に連絡してください。ありがとうございました。
dbdii407

13
serverfault.com/faq特に「他の人が私のものを編集できる」という見出し
-Zypher

@Zypherリンク先のURLはもう存在しません。関連する段落は他の場所に移動しましたか?
カスペルド

回答:


24

更新

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
実際には、ブリッジングが機能するためにブリッジインターフェイスのIPアドレスは必要ありません。
マッシモ

7
wlan0をブリッジmybridgeに追加できない:操作がサポートされていない
-dbdii407

1
@マシモ:はい、それは本当です。「ブリッジングデバイス」からネットにアクセスするには、有効なIPが必要です。
cstamas

10
NATは、ブリッジングとはまったく異なるものです。ブリッジングはレイヤー2、NATはレイヤー3、IPv4固有です。なぜこれが受け入れられた答えなのか理解できません。
WhyNotHugo

3
@Hugo IP NATはレイヤー3ですが、MAC NATはレイヤー2です。WiFiブリッジングでは、代わりに4addr、WDS、MAC NATを使用するか、レイヤー3で何か(IP NATなど)を行うことができます。
デビッドシュワルツ

27

wifiインターフェイスをブリッジするには、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
この設定の目的と、このシナリオで使用することを具体的に提案する理由は何ですか?
-hakre

これは、ブリッジインターフェイスにwlan0インターフェイスを追加しようとしたときの「Operation not allowed」エラーの解決策です。その後、起動後に起動するために/ etc / network / interfacesでブリッジインターフェイスを指定する必要があります。
Str82DHeaD

1
@hakreこの4addrモードでは、WiFiが有線イーサネットのように十分に動作し、ブリッジングが機能します。これがないと、NATなしではブリッジングが機能しません。
デビッドシュワルツ

1
4addrワイヤレスリンクの両側でサポートする必要があります(wifiエクステンダーを実装しようとしている場合)
-nhed

5

APがあなたにとってどういう意味かによって異なります。

1)既知のリンク層アドレス(したがって、ブリッジされたパケットではない)を持つあなたからのパケットのみを表示したい場合があります。 DHCPを認識して検査します)

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

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

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


これは本当に面倒です。また、新しいコンピューターを追加するたびに追加のセットアップが必要です。
マイケルハンプトン

4

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

別の方法は、https: //wiki.debian.org/BridgeNetworkConnectionsProxyArpで説明されているように、ARPプロキシ(parprouted)を使用することです。プリンターのRaspberry Piでこれを設定しましたが、これは魅力のように機能しpost-upます(コマンドに10秒のスリープを追加して、最初にIPアドレスを取得できるようにしました。 RPi ...)


proxy-arp plus dhcp-helperソリューションへのこのリンクは、これまで見てきた中で最も互換性があり、最もクリーンなソリューションです。
minghua

3

ブリッジwlanおよび4addr:

wlan0のブリッジングは苦痛です。通常、ブリッジインターフェイスに追加することはできません(brctlは "Operation not allowed"を返します)。VirtualBoxの "bridged"フィルターを使用すると、ARPとDHCPの競合が大量に発生します。この原因は、802.11フレームにデフォルトで3つのアドレスのみが含まれていることです。つまり、ワイヤレスデバイス(ラップトップとAP)と最終受信者(イーサネットなど)の両方のMACアドレスです。可能な発信者は1人しかいないと常に想定されています。

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

iw dev wlan0 set 4addr on

ただし、4addrを有効にすると、APによって完全に無視される可能性が高くなります。関連付けは成功しますが、すべてのデータフレームがエーテルに消えます。これはセキュリティ上の理由による可能性があります(ソースMACアドレスをスプーフィングするのは非常に難しいためです。そうです)。ラップトップの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ブリッジ

特定の状況では、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をスレーブ化します。インターフェイスを起動する3つの別々のインスタンス(tap0、eth0、およびbr0の場合)が必要です。

この作業を行うためのトリックは、proxy.arpを使用することです。これにより、PC(VM / Linuxコンテナー/ネットワーク名前空間ではなく)が代わりにARPクエリに応答できるようになります。

言い換えれば、ハードウェアインターフェイスと仮想インターフェイス間でIPv4転送を使用することで、物理インターフェイスであるかのようにVM / LXC / NNSをLANに接続できると思いますが、これは真実ではありません。基本的なARPトラフィック。これは、LANの運用を本当に許可するものです。したがって、問題は次のとおりです。IPv4トラフィックを正しく転送した場合、VM / LXC / NNSが機能するように、ARPトラフィックも転送できますか?トリックはproxy-arpを使用することです。

それに対する完全な答えは、Bohdi Zazenのブログにあります。Bridgeワイヤレスカードです。彼は廃止されたパッケージであるuml-utilitiesを使用して、コマンドtunctlを使用して仮想インターフェイスを作成します。これは、彼がuml-utilitiesを使用する唯一のコマンドです。タップまたはtunインターフェースを作成するために上記のように書きましたが、どちらでも好きなように、それに従ってコマンドを修正してください。次に、LXCのvethペアを作成し、tap0とveth0の間にブリッジを作成します。br0と呼ばれるこのブリッジは、Bohdi Zazenによって記述された単純なtap0インターフェースではなく、proxy-arpのために必要なものです。


出典:askubuntu.comnullroute.eu.orgfirejail.wordpress.comsuperuser.com


0

Proxy Arpアプローチが好きでしたが、元の質問ではArch Linuxが指定されていました。Raspbian実装の Arch Linuxバージョンを以下に示します。私は適応するために非常に懸命に試みたのDebianのWikiからの独創的なアプローチが言及した、ここnetctl使用ExecUpPostし、ExecDownPre成功せず。すべてがコマンドラインで機能しましたが、プロファイル内では機能しませんでした。

手順:

  1. systemd-networkdを使用してワイヤレスネットワークを実装します。.networkファイル内で、を設定しIPForward=yesます。WPAサプリカントを使用して、ワイヤレスネットワークインターフェイスを管理しました。
  2. enable-reflector=yes内に設定してmDNSリレーを有効にします/etc/avahi/avahi-daemon.confavahi-daemon.serviceまだ起動していない場合は有効にします。
  3. AURからparproutedをインストールし、Raspbian answerからのものを適合させることにより、サービスファイルを作成します。インターフェイスを無差別に設定する必要があるとは思いませんでした。当然、このサービスを開始して有効にする必要があります。
[Unit]
Description=proxy arp routing service
Documentation=/raspberrypi//q/88954/79866

[Service]
Type=forking
# Restart until wlan0 gained carrier
Restart=on-failure
RestartSec=5
TimeoutStartSec=30
ExecStartPre=/lib/systemd/systemd-networkd-wait-online --interface=wlan0 --timeout=6 --quiet
ExecStartPre=/usr/bin/echo 'systemd-networkd-wait-online: wlan0 is online'
# clone the dhcp-allocated IP to eth0 so dhcrelay will relay for the correct subnet
ExecStartPre=/usr/bin/bash -c '/usr/bin/ip addr add $(/usr/bin/ip -4 -br addr show wlan0 | /usr/bin/grep -Po "\\d+\\.\\d+\\.\\d+\\.\\d+")/32 dev eth0'
ExecStartPre=/usr/bin/ip link set dev eth0 up

#         v minus sign
ExecStart=-/usr/bin/parprouted eth0 wlan0

ExecStopPost=/usr/bin/ip link set dev eth0 down
ExecStopPost=/usr/bin/bash -c '/usr/bin/ip addr del $(/usr/bin/ip -4 -br addr show eth0 | /usr/bin/grep -Po "\\d+\\.\\d+\\.\\d+\\.\\d+")/32 dev eth0'

[Install]
WantedBy=wpa_supplicant@wlan0.service
  1. イーサネットポートに接続されたデバイスのDHCPをサポートするには、dhcrelay(DHCPパッケージから)サービスを作成します。ログを介してgrepを実行することでDHCPサーバーのアドレスを見つけるのは見栄えが悪いようですが、動作します。起動して有効にします。
[Unit]
Description=DHCRelay Service
After=network-online.target parprouted_bridge.service
Type=simple

[Service]
ExecStart=/usr/bin/bash -c '/usr/bin/dhcrelay -d -4 -iu wlan0 -id eth0 $(/usr/bin/journalctl -b -u systemd-networkd.service | /usr/bin/grep -Po "via\s+\K\\d+\\.\\d+\\.\\d+\\.\\d+")'

[Install]
WantedBy=multi-user.target

このアプローチは、RT5370チップセットを備えたUSB WiFiアダプターを搭載したRaspberry PiモデルB +とArchLinuxArmで機能しました。Piはイーサネットのみを備えたプリンターにWiFiを提供するので、ラフな処理に対して堅牢であることが望ましいので、次のステップはSDカードを読み取り専用として構成することです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.