それでは、Ubuntu Server 18.04を使用してルーターを作成したいと思います(すでにハードウェアが搭載されており、すべて動作します。現在IPfireを使用しています)。私はすべてのルーターのディストリビューションを調べましたが、それらのスコープはかなり制限されているようです。
記事: https://arstechnica.com/gadgets/2016/04/the-ars-guide-to-building-a-linux-router-from-scratch/
ファイアウォールガイド: https://help.ubuntu.com/lts/serverguide/firewall.html
Ubuntu Serverは現在、netplanを使用しています。ドキュメントを見てきましたが、OSのこの使用法に精通していないことは明らかです。この記事のやり方(私がよく知っているやり方)を、より現代的な実装に「翻訳」するのを誰かが助けてくれることを望んでいました。
これのネットプラン版を作成するにはどうすればよいですか?
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The WAN interface, marked Lan1 on the case
auto p4p1
iface p4p1 inet dhcp
# The LAN interface, marked Lan2 on the case
auto p1p1
iface p1p1 inet static
address 192.168.99.1
netmask 255.255.255.0
また、UFWのルールのほとんどは、記事のほとんどが述べているとおりであるため、iptablesを直接使用するよりもUFWを使用することをお勧めします。記事との重要な違いの1つは、NATセクションにこれがあることです。
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
# p4p1 is WAN interface, #p1p1 is LAN interface
-A POSTROUTING -o p4p1 -j MASQUERADE
COMMIT
# nat Table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Forward traffic from eth1 through eth0.
-A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
# don’t delete the ‘COMMIT’ line or these nat table rules won’t be processed
COMMIT
しかし、これらの2つのセクションを理解した後。残りは処理できるはずです。どんな助けも素晴らしいでしょう!
私のコメントによると-ここではnetplan
を使用しません。あなたがブリッジングを試みるまで完全にうまくいき、私はそれを確実に動作させることができませんでした。 IMOは準備ができていません。 18.04の時点で、従来のifup
ネットワーク管理に戻すことは賢明なことです。
自分のビルド ではufw
を使用しませんが、それらを翻訳するのはそれほど難しくありません(有名な最後の言葉)。
firewalld
はこれらに非常に類似したコマンドを使用し、UFWに直接変換する必要があります。コマンドは文字通り「古典的な」ファイアウォールコマンドです。それらはufw
でテストされておらず、ufw
を使用する誰かからの調整が必要になる場合があります。
ufw
のメモがインターフェイス上でIPの範囲をどのように提供するかはあまり好きではありませんが(強制されるかもしれませんが)、このようなものに変換されるはずです。 enp1s0
は私の「外部」インターフェイスであり、br0は基本的に一緒にブリッジされる他のすべてのインターフェイスです
参考までに、私のfirewalld
設定は次のようになります。
Sudo firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -o enp1s0 -j MASQUERADE
Sudo firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i br0 -o enp1s0 -j ACCEPT
Sudo firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i enp1s0 -o br0 -m state --state RELATED,ESTABLISHED -j ACCEPT
Sudo firewall-cmd --runtime-to-permanent
最後から2番目のコマンドはcritical
そして、それはこのようなものに翻訳されるはずです。
#masquerade traffic coming out from enp1s0
-A POSTROUTING 0 -o enp1s0 -j MASQUERADE
# Forward and accept any traffic from br0 to enp1s0
-A FORWARD 0 -i br0 -o enp1s0 -j ACCEPT
#accept traffic on existing connections
-A FORWARD 0 -i enp1s0 -o br0 -m state --state RELATED,ESTABLISHED -j ACCEPT
デフォルトのnetplan
構成は、思い出すとallに自動IPアドレスを出力します。
これは、DHCPサーバーを実行するときに最終的に問題になります。そのインターフェイスに静的IPアドレスが必要です。
あなたがmustなら、最小限のネットプラン設定は次のようになります-物事を橋渡ししようとする前にうまくいったと思います。
Enp2s0でdhcpが有効になっている理由はよくわかりません。そのスタンザを削除できる可能性があります。オプションは、常に何かがポートに接続されているとは限らない可能性があるため便利です。
network:
ethernets:
enp1s0:
addresses: []
dhcp4: true
enp2s0:
addresses:
- 192.168.2.1/24
dhcp4: true
optional: true
version: 2
フルクレジットは以下に移動します: https://www.ascinc.com/blog/linux/how-to-build-a-simple-router-with-ubuntu-server- 18-04-1-lts-bionic-beaver /
以下では、Ubuntu 18.04をインストールしたばかりで、まだ何もしていないと仮定します。
Sudo ufw enable
まず、使用するネットワークインターフェイスを構成する必要があります。 WAN(enp0s7)–このインターフェイスはISPからIPを取得するため、DHCPを使用してそのままにします。
LAN(enp3s0f0)–ローカルエリアネットワークに使用するサブネット内の静的IPでインターフェイスを構成します
少し注意してください、Ubuntu 18.04は従来のネットワーク構成ファイル/ etc/network/interfacesを使用しません。 NETPLANを使用します。私の場合、/ etc/netplan /フォルダー内に50-cloud-init.yamlという名前の構成ファイルがあります。あなたの場合、ファイルは別の名前を持っているかもしれません。netplanフォルダー内で.yaml拡張子を持つファイルを探してください。
Nanoで開きましょう:
Sudo nano /etc/netplan/50-cloud-init.yaml
ネットワークのニーズに応じて編集します。私の例では、次のように構成します。
# This file is generated from information provided by
# the datasource. Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
ethernets:
enp0s7:
dhcp4: true
enp3s0f0:
addresses:
- 192.168.1.1/24
dhcp4: false
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4
search: []
version: 2
要約すると、WANであるenp0s7は、インターネットプロバイダーのモデムからIPを取得します。 enp3s0f0はルーターのLAN部分です。静的IPおよびDNSサーバーが必要です(この例ではGoogleを使用しました)。また、enp3s0f0にゲートウェイを構成しませんでした。
次のコマンドで構成を保存します。
Sudo netplan generate
Sudo netplan apply
次に、DHCPサーバーをセットアップします。 LANネットワーク内で静的IPを使用して各クライアントを設定することは本当に望ましくありません。このタスクでは、次のパッケージをインストールする必要があります。
Sudo apt-get install isc-dhcp-server
次に、/ etc/default/dhcpd.confファイルを編集する必要があります。これは、どのネットワークインターフェイスをリッスンする必要があるかをDHCPサーバーに伝えます。私の場合、もちろんenp3s0f0、LANインターフェースです。
次のコマンドを入力します。
Sudo nano /etc/default/isc-dhcp-server
それに応じて編集します。私の場合は次のとおりです。
INTERFACES="enp3s0f0"
次のステップは、DHCPサーバーの構成です。これは、ファイル/etc/dhcp/dhcpd.confを編集することにより行われます
Sudo nano /etc/dhcp/dhcpd.conf
さまざまなパラメーターの束を次に示します。ほとんどのパラメーターには、各行の前に#が付いています。短くするために、使用したパラメーターのみを書き留め、必要に応じて編集します。必要に応じて、このファイルのすべてのコンテンツを削除し、以下のコードをコピーして貼り付けることができます。もちろん、独自のネットワーク構成に応じてIP、ゲートウェイなどを変更します。
option domain-name "whatever.you.want";
option domain-name-servers 8.8.8.8, 8.8.4.4;
default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
authoritative;
log-facility local7;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.101 192.168.1.200;
option subnet-mask 255.255.255.0;
option routers 192.168.1.1;
option broadcast-address 192.168.1.255;
}
次のコマンドを使用して、設定を適用し、起動時にDHCPサーバーを有効にします。
Sudo systemctl restart isc-dhcp-server
Sudo systemctl enable isc-dhcp-server
次のコマンドを使用して、ステータスを確認します。
Sudo systemctl status isc-dhcp-server
すべてが正しく設定されている場合、「ACTIVE」と言う行が必要です。そうでなければ、/ etc/dhcp/dhcpd.confファイル内で何かを台無しにしました。セミコロンまたはブラケットが欠落している可能性があります。
機能するルーターを使用するには、ファイアウォールを適切に構成する必要があります。これは、いくつかのiptablesルールを書き留めることによって行われます。サーバーが再起動された場合にルールを保持するために、ブート時に実行されるスクリプトを作成しました。
Ubuntu 18.04では、ファイル/etc/rc.localはもう存在しません。ただし、次のようにして作成できます。
Sudo nano /etc/rc.local
次に、次のスクリプトをコピーして貼り付けます。各iptablesルールを説明するコメントがあります。必要に応じて削除できますが、#!/ bin/bashを削除しないでください。また、ネットワークインターフェイスに異なる名前がある場合は、enp0s7とenp3s0f0を変更します。
#!/bin/bash
# /etc/rc.local
# Default policy to drop all incoming packets.
iptables -P INPUT DROP
iptables -P FORWARD DROP
# Accept incoming packets from localhost and the LAN interface.
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i enp3s0f0 -j ACCEPT
# Accept incoming packets from the WAN if the router initiated the
# connection.
iptables -A INPUT -i enp0s7 -m conntrack \
--ctstate ESTABLISHED,RELATED -j ACCEPT
# Forward LAN packets to the WAN.
iptables -A FORWARD -i enp3s0f0 -o enp0s7 -j ACCEPT
# Forward WAN packets to the LAN if the LAN initiated the connection.
iptables -A FORWARD -i enp0s7 -o enp3s0f0 -m conntrack \
--ctstate ESTABLISHED,RELATED -j ACCEPT
# NAT traffic going out the WAN interface.
iptables -t nat -A POSTROUTING -o enp0s7 -j MASQUERADE
# rc.local needs to exit with 0
exit 0
このスクリプトは起動時に実行する必要があるため、次のコマンドでファイルを実行可能にする必要があります。
Sudo chmod 755 /etc/rc.local
UFWファイアウォールのデフォルト設定は設定を混乱させ、ルーターが正しく動作するように(WANからLANにパッケージを転送するために)、/ etc/ufw/sysctl内で次のパラメーターを有効にする必要があります.confファイル。次のコマンドを実行します。
Sudo nano /etc/ufw/sysctl.conf
次の行の前にある#を削除します。
net/ipv4/ip_forward=1
行くぞ!ルーターが機能しているので、サーバーを再起動するためにSudo rebootコマンドを実行します。