したがって、私たちのタスクは、ユーザーが認証のために最低限のアクションを要求され、ネットワーク上で作業するネットワークを構築することです。 「ケーブルをコンピューターに差し込み、それが機能した」というように呼ぶこともできます。
課金システムとして、無料(最大200人のサブスクライバー)認定のACP Felix2を使用します。 DHCPサーバーとして、ISC DHCPサーバーを使用します。
仕事の一般的なスキーム

ユーザーがコンピューターの電源を入れると、オペレーティングシステムはDHCP要求を送信して、ネットワーク上のIPアドレスを取得します。 スイッチでDHCPスイッチリダイレクト(DHCPリレー)が有効になっており、DHCPオプション82のサポートが有効になっているため、ユーザーからのDHCP要求をインターセプトし、Option82データ(エージェント回線IDおよびエージェントリモートID)をDHCPパケットに追加して、要求をDHCPサーバーにリダイレクトします。
DHCP要求がDHCPサーバーに到着すると、現在の構成データに基づいてIPアドレスを発行します。 構成では、ユーザーに発行されたIPアドレス、ユーザーが接続されているスイッチのIPアドレスとポートの対応が設定されます。 DHCPサーバー構成は、データベースで利用可能な情報に従って、ACP Felix2によって形成されます。
ACP Felix2は、スイッチポート上の(IPアドレスが発行された)ユーザーのMACアドレスのデータをDHCPサーバーから定期的に収集します。 スイッチのIPアドレスとポート番号によって、システムはデータベース内でユーザーを見つけ、MACアドレスがこのユーザーに属していることを確認します。
また、ACP Felix2は定期的にルーターからARPテーブル(IP-MAC対応テーブル)を取得し、IP-MACペアがデータベース内のユーザーに対応する場合、このユーザーは許可されていると見なされます。 IP-MACペアが消えると(ユーザーがコンピューターの電源を切る)、システムはユーザーを不正なユーザーのリストに転送します(このチェックを行うことで、加入者の機器が本当にオフになっていることを確認します)。
実用的な実装
まず、2枚のネットワークカードとDHCPリレーをサポートするスイッチ(オプション82)を備えたコンピューターが必要です。 次のスキームに従って、最初の(テスト)ネットワークを構築します。

このスキームでは、ACP Felix2上のシステムがルーターの機能を追加で実行します。
設置
ACPサーバーFelix2に記載されている方法のいずれかでダウンロード( felix2.ru/download )およびインストールします。
この記事では、「ACP Felix2インストールディスク」を使用します。 ACP Felix2の詳細なインストール手順は、felix2.ru / documentationにあります。
インストール後、インストール中に指定されたルートのユーザー名とパスワードを使用してシステムにログインします。
インストール後のeth0ネットワークインターフェイスは、内部ネットワークで動作するように構成されています。
IP-: 10.1.1.1
: 255.255.255.0
eth1インターフェイスは、高レベルのインターネットプロバイダーと連携するように構成する必要があります。
ifconfig eth1 1.1.1.2 netmask 255.255.255.0 route add default gw 1.1.1.1
ここで、1.1.1.2は優れたインターネットプロバイダーから提供されたIPアドレス、1.1.1.1はプロバイダーのゲートウェイのIPアドレスです。
再起動後にネットワーク構成がリセットされないようにするには、ファイル/ etc / network / interfacesで説明する必要があります
ISC-DHCPサーバーをインストールします。
apt-get update apt-get install isc-dhcp-server
DHCPをインストールした直後は、サーバーは起動しないため、まだ構成されていません。
root@felix2:~# cat /var/log/syslog | grep dhcp | tail -n 10 May 8 21:48:33 felix2 dhcpd: May 8 21:48:33 felix2 dhcpd: May 8 21:48:33 felix2 dhcpd: No subnet declaration for eth0 (10.1.1.1). May 8 21:48:33 felix2 dhcpd: ** Ignoring requests on eth0. If this is not what May 8 21:48:33 felix2 dhcpd: you want, please write a subnet declaration May 8 21:48:33 felix2 dhcpd: in your dhcpd.conf file for the network segment May 8 21:48:33 felix2 dhcpd: to which interface eth0 is attached. ** May 8 21:48:33 felix2 dhcpd: May 8 21:48:33 felix2 dhcpd: May 8 21:48:33 felix2 dhcpd: Not configured to listen on any interfaces!
構成
ISC DHCPサーバー構成テンプレートファイル(dhcp_opt82_ip-port.conf)およびその他の必要なすべての構成ファイルは、ここからダウンロードできます。
ftp://download.felix2.ru/config.examples/felix2_dhcp_opt82.tar.gz
構成ファイルをダウンロード、展開、置換します。
wget ftp://download.felix2.ru/config.examples/felix2_dhcp_opt82.tar.gz tar -xf felix2_dhcp_opt82.tar.gz -C /etc/felix2/
ACP Felix2を再起動します。
/etc/init.d/felix2 restart
ACP Felix2での機器とテストユーザーの作成
Web管理インターフェイスに行きましょう。 一時的に静的IPアドレス(たとえば、10.1.1.10 / 24)を置くことにより、このためにテストマシンを使用できます。 Webベースの管理インターフェイスは、HTTPS経由でポート444で使用できます。 デフォルトのログイン/パスワード:su / su。

インターフェースに追加フィールドを表示するには、インターフェース設定(構成->インターフェース設定)でDHCP-Opt82アドレス発行スキームが使用されていることを示します。

次に、スイッチを機器データベースに追加します(機器->新しい機器):
ステータス:インストール済み、IPアドレス:10.1.1.253、モデル:DES-3200-28、[追加]をクリックします。

新しいユーザーを作成します(ユーザー->新しいユーザー)。 接続アドレスを選択します。 システムは、この家で使用されているサブネットを自動的に提案し、最初の空きIPアドレスを選択します。
ユーザーが接続する機器を選択します。 この家に設置されている機器のリストから機器を選択するように求められます。
ユーザーがスイッチの最初のポートに接続されることを示します。 「接続が完了しました」というフラグをマークし、「追加」をクリックします。

その後、アカウントを補充し(アカウントの補充->新規補充)、料金プランを有効にします(支払い->関税による支払い)。 (ユーザー->個人統計)でユーザーの現在のステータスを表示できます。
DHCPサーバー構成ファイルが更新されたことを確認します。
cat /etc/dhcp/dhcpd.conf
DHCPサーバーが機能していることを確認します。
ps ax | grep dhcpd
スイッチ構成
次に、スイッチを構成する必要があります。 スイッチが「そのまま」の場合、指示には「デフォルト」のIPアドレスが示されている必要があります。 機器が「使用済み」で、IPアドレス/ログイン/パスワードがわからない場合は、コンソール接続を介して設定をリセットする必要があります。
この記事では、DES-3200-28の「すぐに使える」スイッチを使用します。
テストマシンに静的IPアドレス(10.90.90.1/8など)を配置します。telnetプロトコルを使用してスイッチに接続します。

オンにして、DHCPリレーを設定します。
enable dhcp_relay config dhcp_relay hops 16 time 0 config dhcp_relay option_82 state enable config dhcp_relay option_82 check disable config dhcp_relay option_82 policy replace config dhcp_relay option_82 remote_id default config dhcp_relay add ipif System 10.1.1.1
これで、スイッチはDHCP要求をインターセプトし、識別情報(オプション82)を追加して、DHCPサーバーに送信します(10.1.1.1)
スイッチのデフォルトルートと新しいIPアドレスを設定します。
create iproute default 10.1.1.1 config ipif System vlan default ipaddress 10.1.1.253/24 state enable
最後のコマンド(IPアドレスの変更)の後、接続は切断されます。 テストマシンに静的IPアドレス(10.1.1.10/24など)を配置し、新しいアドレスでスイッチに接続し、構成を保存します。
save
テストコンピューターをオンにして、DHCP経由でネットワーク設定を取得します。
テストコンピューターをスイッチの最初のポートに接続します。 スイッチからのDHCP-Relayパケットがサーバーに到達し、クライアントがIPアドレスを受信することを確認します。
tail –n 1000 /var/log/syslog | grep dhcpd

ユーザーデータがACP Felix2インターフェイスに正しく表示されることを確認します。

実際のネットワーク図
上記のネットワークスキームはテストです(1つのスイッチに多くのユーザーを接続することはできません)。 以下は実際のネットワーク図の例です(最大600人のサブスクライバー)。 バックボーンプロバイダーからのアップリンクは、スイッチの光ポートに到着します。 このポートは、VLANで、eth1ネットワークカードがACP Felix2を使用してサーバーから接続されているポートと組み合わせる必要があります。
たとえば、1000番目のVLANでポート1とポート24を組み合わせます。
create vlan v1000 tag 1000 config vlan v1000 add untagged 1,24

ネットワークが大きくなったら、家を別々のVLANに分割することもお勧めします。
専用ルーターを使用したネットワーク図
イントラネット(ローカル)トラフィックの増加に伴い、スイッチと、同時にルーターとして機能するACP Felix2を備えたサーバー間の接続がボトルネックになります。 これを回避するには、専用ルーターをインストールする必要があります。
また、ACP Felix2に外部ルーターからARPテーブルを受信するように指示する必要があります。 ファイル/etc/felix2/felix2.xmlを編集します。
<arp_fetcher> <connection name="DGS-3627G" address="10.1.1.1" port="22" protocol="ssh" login="admin" passwd="12345" interface="DLINK" /> </arp_fetcher>
arp_fetcherモジュールは、CISCO機器(インターフェイス=「CISCO」)、D-Link(インターフェイス=「DLINK」)、またはLinuxベースのソフトウェアルーター(インターフェイス=「Linux」)からARPアドレステーブルを受信できます。

ホーカーの要求に応じて、ISC DHCPサーバー用のシステム生成構成ファイルの例が追加されました。
この例では、アドレス10.1.1.253のスイッチのポート1〜3に接続するユーザーには、それぞれアドレス10.1.1.2-10.1.1.4が与えられます。
# # Automatically generated configuration file # Filename: dhcpd.conf (/etc/dhcp/dhcpd.conf) # Generator: Felix2 # Creation Date: 15.05.2012 11:31:36 # # # option definitions common to all supported networks... # authoritative; default-lease-time 86400; max-lease-time 86400; ddns-update-style none; log-facility local7; if exists agent.remote-id and exists agent.circuit-id { if binary-to-ascii(16, 8, "", substring(option agent.remote-id, 2, 1)) = "0" { set switch-mac = concat("0", binary-to-ascii(16, 8, "", substring(option agent.remote-id, 2, 1)), ":", binary-to-ascii(16, 8, ":", substring(option agent.remote-id, 3, 6))); } else { set switch-mac = binary-to-ascii(16, 8, ":", substring(option agent.remote-id, 2, 6)); } set switch-addr = binary-to-ascii(10, 8, ".", packet(24, 4)); set switch-port = binary-to-ascii(10, 8, "", substring(option agent.circuit-id, 5, 1)); set switch-port-vlan = binary-to-ascii(10, 8, "", substring(option agent.circuit-id, 2, 2)); log(info, concat("- Lease: ", binary-to-ascii(10, 8, ".", leased-address), " via IP: ", switch-addr, " (MAC: ", switch-mac, ") on port: ", switch-port, " in VLAN: ", switch-port-vlan)); } # # subnets # subnet 10.1.1.0 netmask 255.255.255.0 { option routers 10.1.1.1; option domain-name-servers 10.1.1.1; class "1:1" {match if binary-to-ascii(10, 8, ".", packet(24, 4))="10.1.1.253" and binary-to-ascii(10, 8, "", suffix(option agent.circuit-id, 1)) = "1";} pool {range 10.1.1.2; allow members of "1:1";} class "1:2" {match if binary-to-ascii(10, 8, ".", packet(24, 4))="10.1.1.253" and binary-to-ascii(10, 8, "", suffix(option agent.circuit-id, 1)) = "2";} pool {range 10.1.1.3; allow members of "1:2";} class "1:3" {match if binary-to-ascii(10, 8, ".", packet(24, 4))="10.1.1.253" and binary-to-ascii(10, 8, "", suffix(option agent.circuit-id, 1)) = "3";} pool {range 10.1.1.4; allow members of "1:3";} }