私のホームネットワークは現在次のとおりです。
次のように再構成したい(ISPスイッチを取り外してSTBをスイッチに接続)。
私のゲートウェイは、2つのイーサネットポート(NATを実行し、私のLANにDHCPとDNSを提供する)があり、GNU / Linuxを実行しているPCです。
障害物はISPのSTB(ケーブルボックスと似ていますが、イーサネットIPTVを使用するセットトップボックス)です。 DHCP要求を送信し、ISPゲートウェイが要求を受信すると、WAN IPの代わりに内部IP(10.xyz)で応答します。これらのデバイスが接続しようとしているIPTVポータルは、内部IPからのみアクセスできます。
したがって、効果的にすべきことは、ゲートウェイに特定のMACアドレスを持つデバイスのスイッチ(ブリッジ?)として機能させることです。
私は次のことを行うべきだと思います。
- ソースアドレスがセットトップボックスMACと一致するパケットをLANからWANインターフェイスに直接コピーするには、iptablesルールを追加します。
- 宛先アドレスがSTB MACと一致するパケットをWANからLANインターフェイスに直接コピーするには(つまり、上記とは逆)、iptablesルールを追加します。
- ゲートウェイのDHCPサーバーがSTBからのDHCP要求に応答しないことを確認してください。
- NAT処理からSTB MACのパケットを除外しますか?
- ARPリクエストについて心配する必要がありますか?
答え1
ebtables
上記の質問に答えるために、ネットワーキングのエキスパートの友人からLANとWANインターフェースをブリッジし、次を使用してブリッジする宛先をフィルタリングするようアドバイスを受けました。
lan0: [add LAN IPs and use as LAN interface]
eth0 (LAN)
eth1 (WAN) [add WAN IPs and use as WAN interface]
# Forward traffic to/from STBs
ebtables -A FORWARD -i eth0 -o eth1 -s $STB_MAC -j ACCEPT
ebtables -A FORWARD -i eth1 -o eth0 -d $STB_MAC -j ACCEPT
# Allow DHCP responses
ebtables -A FORWARD -i eth0 -o eth0 -d ff:ff:ff:ff:ff:ff -p ipv4 --ip-proto udp --ip-sport 67 --ip-dport 68 -j ACCEPT
# Allow ARP requests
ebtables -A FORWARD -i eth0 -o eth0 -d ff:ff:ff:ff:ff:ff -p arp --arp-ip-dst ! $LAN_SUBNET -j ACCEPT
# The WAN is not really part of the LAN
ebtables -A INPUT -i eth1 -j DROP
ebtables -A FORWARD -i eth1 -j DROP
ebtables -A FORWARD -o eth1 -j DROP
ebtables -A OUTPUT -o eth1 -j DROP
# Allow eth1 to be used to access the WAN
ebtables -t broute -A BROUTING -i eth1 -d $STB_MAC -j ACCEPT
ebtables -t broute -A BROUTING -i eth1 -d $STB_MAC -j ACCEPT
ebtables -t broute -A BROUTING -i eth1 -j DROP
しかし、この場合、ISPスイッチはポートベースのVLANタグ付け(PCポート用の1つのVLAN、STBポート用の1つのVLAN)をしていることがわかりました。
したがって、ISP ルーターを削除するには、次のものが必要です。
- ゲートウェイのWANネットワークカードに2つのVLANを設定します。
- WAN IP設定をNICからWAN VLAN(NATを含む)に移動する
- ゲートウェイ DHCP サーバーのブラックリスト STB MAC アドレス
- ISPの内部VLANを自分のLANにブリッジ
- (オプション)LAN パケットが ISP VLAN に漏洩するのを防ぐためにファイアウォールルールを追加します。
これはISP DHCPサーバーがすでにSTBからのDHCP要求にのみ応答しているために機能するため、ゲートウェイにこれをブラックリストに追加すると、すべてのDHCP応答がゲートウェイまたはISP DHCPサーバーから応答されます。を使用している場合は、dnsmasq
たとえばdhcp-host=01:23:45:*:*:*,ignore
を使用してブラックリストを作成できます/etc/dnsmasq.conf
。
他のすべての作業は、systemd-networkd構成ファイルを使用して実行できます。 - VLAN用のファイルの作成 - WAN NICの一致ファイルにエントリとして追加.netdev
- VLAN用のファイルの作成 - LAN / STBブリッジ用のファイルの作成 - STB VLANとLANの追加ブリッジするNICVLAN
.network
.network
.netdev
以下は、systemd-networkd構成ファイルの完全な例のセットです。
/etc/systemd/network/isp-link.network
- WAN NICのネットワーク構成:ここではVLANのみを設定します。 VLAN IDをISPが使用するIDに変更します。この例では、1234をWAN VLANとして使用し、56を内部(IPTV)VLANとして使用します。
[Match] Name=eno1 [Network] VLAN=eno1.1234 VLAN=eno1.56
/etc/systemd/network/eno1.1234.netdev
- WAN VLAN:[NetDev] Name=eno1.1234 Kind=vlan [VLAN] Id=1234
/etc/systemd/network/eno1.56.netdev
- IPTV用ISP内部VLAN:[NetDev] Name=eno1.56 Kind=vlan [VLAN] Id=56
/etc/systemd/network/home-bridge.netdev
- ISP-VLAN/ホームLANブリッジ装置:[NetDev] Name=br0 Kind=bridge
/etc/systemd/network/home-bridge.network
- 橋のネットワーク:ここで DHCP サーバーが有効になっていないことを確認してください。 systemd-networkdは無視するMACブラックリストの設定を許可しないため、他のDHCPサーバー(dnsmasqなど)を使用する必要があります。
[Match] Name=br0 [Network] Address=192.168.0.1/24 IPForward=yes IPMasquerade=yes DHCP=no DHCPServer=no
/etc/systemd/network/home-lan.network
- LAN NIC用のネットワークファイル:[Match] Name=enp9s0 [Network] Bridge=br0
/etc/systemd/network/isp-vlan-wan.network
- ゲートウェイのWAN構成:これはDHCPを使用します。静的構成がある場合は、これを //
Address
設定に変更します。Gateway
DNS
[Match] Name=eno1.1234 [Network] IPForward=yes DHCP=yes
/etc/systemd/network/isp-vlan-internal.network
- 内部VLAN用のネットワークファイル:[Match] Name=eno1.56 [Network] Bridge=br0
/etc/dnsmasq.conf
- DHCPサーバーの設定:# Disable DNS server - will be handled by systemd-networkd port=0 # Enable and configure DHCP server dhcp-range=192.168.0.129,192.168.0.254,12h # Specify which interfaces to listen on listen-address=127.0.0.1 listen-address=::1 listen-address=192.168.0.1 # Ignore DHCP requests from the STBs dhcp-host=01:23:45:*:*:*,ignore