web-dev-qa-db-ja.com

Ubuntu Server 18.04.1 NetplanおよびUFW

それでは、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つのセクションを理解した後。残りは処理できるはずです。どんな助けも素晴らしいでしょう!

1
soundconjurer

私のコメントによると-ここでは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なら、最小限のネットプラン設定は次のようになります-物事を橋渡ししようとする前にうまくいったと思います。

  • enp1s0は私の外部インターフェイスです
  • enp1s0は内部です。

Enp2s0でdhcpが有効になっている理由はよくわかりません。そのスタンザを削除できる可能性があります。オプションは、常に何かがポートに接続されているとは限らない可能性があるため便利です。

network:
    ethernets:
        enp1s0:
            addresses: []
            dhcp4: true
        enp2s0:
            addresses: 
                - 192.168.2.1/24
            dhcp4: true
            optional: true
    version: 2
2
Journeyman Geek

フルクレジットは以下に移動します: https://www.ascinc.com/blog/linux/how-to-build-a-simple-router-with-ubuntu-server- 18-04-1-lts-bionic-beaver /

以下では、Ubuntu 18.04をインストールしたばかりで、まだ何もしていないと仮定します。

0.ルーティングルールが実際に適用されることを確認するためにファイアウォールをオンにします

Sudo ufw enable

1.ネットワークインターフェイスのセットアップ

まず、使用するネットワークインターフェイスを構成する必要があります。 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

2. DHCPサーバーのセットアップ

次に、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ファイル内で何かを台無しにしました。セミコロンまたはブラケットが欠落している可能性があります。

3.ファイアウォールの設定

機能するルーターを使用するには、ファイアウォールを適切に構成する必要があります。これは、いくつかの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コマンドを実行します。

2
Vince Pike