Linuxサーバーをルーターに変えてトラフィックを静的および動的に処理する方法-パート10


この LFCE Linux Foundation Certified Engineer )シリーズの以前のチュートリアルで予想したように、この記事では、特定のアプリケーションを使用した静的および動的なIPトラフィックのルーティングについて説明します。

まず最初に、いくつかの定義をまっすぐにしましょう。

  1. In simple words, a packet is the basic unit that is used to transmit information within a network. Networks that use TCP/IP as network protocol follow the same rules for transmission of data: the actual information is split into packets that are made of both data and the address where it should be sent to.
  2. Routing is the process of “guiding” the data from source to destination inside a network.
  3. Static routing requires a manually-configured set of rules defined in a routing table. These rules are fixed and are used to define the way a packet must go through as it travels from one machine to another.
  4. Dynamic routing, or smart routing (if you wish), means that the system can alter automatically, as needed, the route that a packet follows.

高度なIPおよびネットワークデバイス構成

iproute パッケージは、ネットワークとトラフィック制御を管理するための一連のツールを提供します。これらのツールは、ifconfigや route などのレガシーツールの置き換えを表すため、この記事全体で使用します。

iproute スイートの中心的なユーティリティは、単にipと呼ばれます。基本的な構文は次のとおりです。

# ip object command

object は、次のいずれかになります(最も頻度の高いオブジェクトのみが表示されます。完全なリストについては、man ip を参照してください)。

  1. link: network device.
  2. addr: protocol (IP or IPv6) address on a device.
  3. route: routing table entry.
  4. rule: rule in routing policy database.

一方、コマンドは、オブジェクトに対して実行できる特定のアクションを表します。次のコマンドを実行して、特定のオブジェクトに適用できるコマンドの完全なリストを表示できます。

# ip object help

例えば、

# ip link help

上の画像は、たとえば、次のコマンドを使用してネットワークインターフェイスのステータスを変更できることを示しています。

# ip link set interface {up | down}

ip 」コマンドのこのようなその他の例については、IPアドレスを構成するための10の便利な「ip」コマンドをお読みください。

この例では、 eth1 を無効および有効にします。

# ip link show
# ip link set eth1 down
# ip link show

eth1を再度有効にする場合

# ip link set eth1 up

すべてのネットワークインターフェイスを表示する代わりに、次のいずれかを指定できます。

# ip link show eth1

これにより、eth1のすべての情報が返されます。

次の3つのコマンドのいずれかを使用して、現在のメインルーティングテーブルを表示できます。

# ip route show
# route -n
# netstat -rn

3つのコマンドの出力の最初の列は、ターゲットネットワークを示します。 ip route showの出力(キーワード dev に続く)には、これらのネットワークへの物理ゲートウェイとして機能するネットワークデバイスも表示されます。

現在、ルートよりも ipコマンドが優先されていますが、残りの詳細な説明については、man ip-route および man route を参照できます。列の。

icmp (ping)パケットをdev2からdev4に、またはその逆にルーティングする必要があります(両方のクライアントマシンが異なるネットワーク上にあることに注意してください)。各NICの名前は、対応するIPv4アドレスとともに、角括弧内に示されています。

テスト環境は次のとおりです。

Client 1: CentOS 7 [enp0s3: 192.168.0.17/24] - dev1
Router: Debian Wheezy 7.7 [eth0: 192.168.0.15/24, eth1: 10.0.0.15/24] - dev2
Client 2: openSUSE 13.2 [enp0s3: 10.0.0.18/24] - dev4

dev1(CentOSボックス)のルーティングテーブルを見てみましょう。

# ip route show

次に、 enp0s3 NICと192.168.0.15への接続を使用して、10.0.0.0/24ネットワーク内のホストにアクセスするように変更します。

# ip route add 10.0.0.0/24 via 192.168.0.15 dev enp0s3

これは基本的に、「ゲートウェイとして192.168.0.15を使用して、enp0s3ネットワークインターフェイスを介して10.0.0.0/24ネットワークへのルートを追加する」と読みます。

同様に、dev4(openSUSEボックス)で192.168.0.0/24ネットワークのホストにpingを実行します。

# ip route add 192.168.0.0/24 via 10.0.0.15 dev enp0s3

最後に、Debianルーターで転送を有効にする必要があります。

# echo 1 > /proc/sys/net/ipv4/ip_forward

では、pingを実行しましょう。

そして、

これらの設定をブート間で永続的にするには、ルーターで /etc/sysctl.conf を編集し、次のように net.ipv4.ip_forward 変数がtrueに設定されていることを確認します。

net.ipv4.ip_forward = 1

さらに、両方のクライアントでNICを構成します(openSUSEの/etc/sysconfig/network およびCentOSの/etc/sysconfig/network-scripts 内の構成ファイルを探します–どちらの場合も、 ifcfg-enp0s3 と呼ばれます。

openSUSEボックスの設定ファイルは次のとおりです。

BOOTPROTO=static
BROADCAST=10.0.0.255
IPADDR=10.0.0.18
NETMASK=255.255.255.0
GATEWAY=10.0.0.15
NAME=enp0s3
NETWORK=10.0.0.0
ONBOOT=yes

Linuxマシンをルーターとして使用できるもう1つのシナリオは、インターネット接続をプライベートLANと共有する必要がある場合です。

Router: Debian Wheezy 7.7 [eth0: Public IP, eth1: 10.0.0.15/24] - dev2
Client: openSUSE 13.2 [enp0s3: 10.0.0.18/24] - dev4

前の例のようにクライアントでパケット転送と静的ルーティングテーブルを設定することに加えて、ルーターにいくつかのiptablesルールを追加する必要があります。

# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
# iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

最初のコマンドは、nat(ネットワークアドレス変換)テーブルの POSTROUTING チェーンにルールを追加し、発信パッケージにeth0NICを使用する必要があることを示します。

MASQUERADE は、このNICに動的IPがあり、パッケージをインターネットの「 wild wild world 」に送信する前に、パケットのプライベート送信元アドレスがルーターのパブリックIPのIPに変更されました。

多くのホストがあるLANでは、ルーターは/proc/net/ip_conntrack で確立された接続を追跡するため、インターネットからの応答をどこに返すかを認識します。

次の出力の一部のみ:

# cat /proc/net/ip_conntrack

次のスクリーンショットに示されています。

パケットの発信元(openSUSEボックスのプライベートIP)と宛先(Google DNS)が強調表示されている場所。これは実行の結果でした:

# curl www.tecmint.com

openSUSEボックスで。

すでに推測できると思いますが、ルーターはネームサーバーとしてGoogleの8.8.8.8を使用しています。これは、発信パケットの宛先がそのアドレスを指している理由を説明しています。

注:インターネットからの着信パッケージが受け入れられるのは、それらがすでに確立された接続の一部である場合(コマンド#2)であり、発信パッケージは「無料終了」(コマンド#3)が許可されている場合のみです。

このシリーズのパート8–Iptablesファイアウォールの構成で概説されている手順に従ってiptablesルールを永続化することを忘れないでください。

Quaggaを使用した動的ルーティング

現在、Linuxで動的ルーティングに最も使用されているツールは quagga です。これにより、システム管理者は、比較的低コストのLinuxサーバーを使用して、強力な(そしてコストのかかる)Ciscoルーターが提供するのと同じ機能を実装できます。

ツール自体はルーティングを処理しませんが、パケットを処理するための新しい最適なルートを学習するときに、カーネルルーティングテーブルを変更します。

しばらく前に開発が中止されたプログラムであるゼブラのフォークであるため、歴史的な理由から、ゼブラと同じコマンドと構造を維持しています。そのため、この時点からゼブラへの参照が多く表示されます。

動的ルーティングと関連するすべてのプロトコルを1つの記事で網羅することは不可能ですが、ここで紹介するコンテンツは、基礎となる出発点になると確信しています。

選択したディストリビューションにquaggaをインストールするには:

# aptitude update && aptitude install quagga 				[On Ubuntu]
# yum update && yum install quagga 					[CentOS/RHEL]
# zypper refresh && zypper install quagga 				[openSUSE]

例3と同じ環境を使用しますが、eth0がIP192.168.0.1のメインゲートウェイルーターに接続されている点が異なります。

次に、/etc/quagga/daemons を次のように編集します。

zebra=1
ripd=1

次に、次の構成ファイルを作成します。

# /etc/quagga/zebra.conf
# /etc/quagga/ripd.conf

次の行を追加します(選択したホスト名とパスワードに置き換えます)。

service quagga restart
hostname    	dev2
password    	quagga
# service quagga restart

注:その ripd.conf は、ルーティング情報プロトコルの構成ファイルであり、到達可能なネットワークとその距離(ホップ数)に関する情報をルーターに提供します。

これはquaggaと一緒に使用できるプロトコルの1つにすぎないことに注意してください。プレーンテキストで資格情報を渡すという欠点はありますが、使いやすさとほとんどのネットワークデバイスでサポートされているため、このチュートリアルで選択しました。そのため、構成ファイルに適切なアクセス許可を割り当てる必要があります。

# chown quagga:quaggavty /etc/quagga/*.conf
# chmod 640 /etc/quagga/*.conf 

この例では、2つのルーターで次のセットアップを使用します(前に説明したように、必ずルーター#2 の構成ファイルを作成してください)。

重要:両方のルーターについて、次の設定を繰り返すことを忘れないでください。

ルーターとカーネル間の論理的な仲介役であるゼブラ(ポート 2601 でリッスン)に接続します。

# telnet localhost 2601

/etc/quagga/zebra.conf ファイルに設定されているパスワードを入力し、構成を有効にします。

enable
configure terminal

各NICのIPアドレスとネットワークマスクを入力します。

inter eth0
ip addr 192.168.0.15
inter eth1
ip addr 10.0.0.15
exit
exit
write

次に、 RIP デーモンターミナル(ポート2602)に接続する必要があります。

# telnet localhost 2602

/etc/quagga/ripd.conf ファイルで構成されているユーザー名とパスワードを入力し、次のコマンドを太字で入力します(わかりやすくするためにコメントを追加しています)。

enable turns on privileged mode command.
configure terminal changes to configuration mode. This command is the first step to configuration
router rip enables RIP.
network 10.0.0.0/24 sets the RIP enable interface for the 10.0.0.0/24 network. 
exit
exit
write writes current configuration to configuration file.

注:どちらの場合も、構成は以前に追加した行( /etc/quagga/zebra.conf および /etc/quagga/ripd.conf )に追加されます。 。

最後に、両方のルーターのzebraサービスに再度接続し、それぞれが他のルーターの背後にあるネットワークへのルートを「学習」したことを確認します。これは、そのルーターに到達するためのネクストホップです。ネットワーク、コマンド show ip route を実行して:

# show ip route

さまざまなプロトコルやセットアップを試したい場合は、詳細なドキュメントについてQuaggaプロジェクトサイトを参照することをお勧めします。

結論

この記事では、Linuxボックスルーターを使用して静的ルーティングと動的ルーティングを設定する方法について説明しました。ルーターを好きなだけ追加して、好きなだけ実験してください。ご意見やご質問がございましたら、下記のお問い合わせフォームからお気軽にご連絡ください。

全著作権所有。 © Linux-Console.net • 2019-2022