Ubuntuサーバーを使用して、ネットワーク上の2つのプライベートネットワークのルーターにしたい。
また、このサーバーがプライベートネットワークのDHCP要求を処理するようにします。
Ubuntu 16.04サーバーをセットアップしてこれを行うにはどうすればよいですか?
注#1:これは、可能な限り最も基本的なセットアップをセットアップするためのものです。クロスサブネットトラフィックをまったく制限せずに、2つ以上のサブネット用のストレートルーターをセットアップします。ファイアウォールルールを使用してこれを変更し、個々の機能の制御やサブネットまたはインターネットへのネットワークアクセスをより適切に処理できますが、これはこの基本的な「セットアップ」Q/Aペアの範囲外です。
注#2:この回答が書かれた時点では、Ubuntuはデフォルト設定のネットワーク制御システムにNetplanをまだ使用していませんでした。この答えは、Netplanを考慮せずに書かれたものです。
もちろん、3つのネットワークインターフェイスを備えたUbuntuサーバーが必要です。1つはインターネット接続インターフェイス用で、もう2つはプライベートネットワークインターフェイスです。
その後、このガイドに従ってこのサーバーをルーターとして設定します。
(1)/etc/sysctl.conf
を編集します。この行を見つけてコメント解除します。
net.ipv4.ip_forward=1
これが完了したら、コマンドSudo sysctl -p
を実行してシステムカーネル設定を再読み込みします。これにより、UbuntuボックスはIPv4を介してサブネットとVLANを介してトラフィックを処理できるようになりました。
(2)ルーターボックスの/etc/network/interfaces
を編集して、プライベートネットワークにサービスを提供するインターフェイスに静的IPアドレスを設定します。この例では、インターフェースがens37
とens38
であり、ens33
が私のボックスのプライマリインターネット接続インターフェースであることを知っています。 ens33
はそのままにしておきますが、ens37
およびens38
構成スタンザを追加します。
# Private Subnet 1
auto ens37
iface ens37 inet static
address 10.76.100.1
netmask 255.255.255.0
dns-nameservers 8.8.8.8 8.8.4.4
# Private Subnet 2
auto ens38
iface ens38 inet static
address 10.76.101.1
netmask 255.255.255.0
dns-nameservers 8.8.8.8 8.8.4.4
設定に応じて、ネットワークアドレスとインターフェイス名を調整します。
** VMware Workstationなどを使用しており、VMでvmnet#
デバイスが選択されている場合、ホストシステムにホスト接続デバイスがないことを確認してください。このvmnet
、または使用する場合は、ルーターボックスの最後のオクテットで.1
とは異なるアドレスを使用します。
(3)DHCPサーバーソフトウェアをインストールします。これは後の手順で構成します。
Sudo apt-get install isc-dhcp-server
これにより、ルーターボックスがプライベートサブネットのDHCP要求を処理できるようになります。
(4)最初に、自動的にインストールされたDHCPサーバー設定をバックアップファイルにコピーします。
Sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.dist
(5)次に、元のファイルを空白にして、構成を適用できるようにします。
echo "" | Sudo tee /etc/dhcp/dhcpd.conf
(6)では、設定を使用しましょう。
# DHCP Server config
# The ddns-updates-style parameter controls whether or not the server will
# attempt to do a DNS update when a lease is confirmed. We default to the
# behavior of the version 2 packages ('none', since DHCP v2 didn't
# have support for DDNS.)
ddns-update-style none;
# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;
# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;
# Specify the domain name servers to specify for each subnet.
option domain-name-servers 8.8.8.8;
option domain-name-servers 8.8.4.4;
# DHCP Subnet configurations
# Subnet 1 - ens37
subnet 10.76.100.0 netmask 255.255.255.0 {
default-lease-time 86400;
max-lease-time 86400;
range 10.76.100.10 10.76.100.200;
option routers 10.76.100.1;
option subnet-mask 255.255.255.0;
option broadcast-address 10.76.100.255;
}
# Subnet 2 - ens38
subnet 10.76.101.0 netmask 255.255.255.0 {
default-lease-time 86400;
max-lease-time 86400;
range 10.76.101.10 10.76.101.200;
option routers 10.76.101.1;
option subnet-mask 255.255.255.0;
option broadcast-address 10.76.101.255;
}
必要に応じてこの構成を調整し、ネットワーク構成設定で上記で設定したIPアドレスに基づいて「ルーター」オプションを更新してください。
必要に応じてファイルの調整が完了したら、ファイルを保存します。
(7)気にするインターフェイスをシステムに伝える必要があります。 /etc/default/isc-dhcp-server
を編集し、ens37
行でプライベートネットワークインターフェイス(私の場合は38
とINTERFACES=""
)を指定して、次のようにします。
INTERFACES="ens37 ens38"
ファイルを保存します。
(8)そして今、ファイアウォールのルール。モノがルーターとして動作することを許可するようシステムに指示する必要があり、そのためには適切な制御とルールセットを設定する必要があります。ゼロからのセットアップについて説明しているため、ここでファイアウォールを設定していないと想定しています。
このマシンで既にufw
をセットアップしている場合は、Sudo ufw disable
を実行し、Sudo apt-get remove ufw
でufw
をアンインストールします。 UFWが機能しないiptables
の高度なパワーが直接必要です。ほとんどのルーターでは、not UFWを使用する必要がありますat all。
インターネットに接続されたネットワークインターフェイスのインターフェイス名を確認してください。サンプルのテストシステムでは、ens33
でしたが、システムによって異なる場合があります。ルーターとなるプライベートネットワークのネットワークインターフェイスも知っていることを確認してください。ここでも必要です。次のコマンドを使用して、次のようにiptables
をセットアップします。私のコメントにも注意してください:
# Accept localhost traffic (local traffic to the system itself)
Sudo iptables -A INPUT -i lo -j ACCEPT
# Accept all traffic related to established connections
Sudo iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# Drop traffic coming from the Internet into our Internet-connected interface (except for traffic related to other established connections)
# Update this to match the interface name of your Internet-connected interface.
Sudo iptables -A INPUT -i ens33 -j DROP
# Accept traffic inbound from the local subnets we are acting as a router for.
# CHANGE THESE INTERFACE NAMES ACCORDING TO YOUR SETUP!
Sudo iptables -A INPUT -i ens37 -j ACCEPT
Sudo iptables -A INPUT -i ens38 -j ACCEPT
# Since we don't want to have our system completely open to the Internet, we need
# to drop all other traffic coming to our network. This way, we can prevent the
# Internet at large from accessing our network directly from the Internet.
Sudo iptables -A INPUT -j DROP
# Add rules to accept forwarding on the interfaces we are doing routing for.
# CHANGE THESE INTERFACE NAMES ACCORDING TO YOUR SETUP!
Sudo iptables -A FORWARD -i ens37 -j ACCEPT
Sudo iptables -A FORWARD -o ens37 -j ACCEPT
Sudo iptables -A FORWARD -i ens38 -j ACCEPT
Sudo iptables -A FORWARD -o ens38 -j ACCEPT
# Add rules to the NAT table to allow us to actually let traffic on the interfaces
# which we are doing routing for go out to the Internet masquerade as our Internet-
# connected interface.
#
# ADJUST THE IP RANGES HERE TO MATCH THE IP RANGES AND THE SUBNETS FOR YOUR OWN
# ENVIRONMENT! Remember that the IP address of 10.76.100.1 for the router, and
# the netmask 255.255.255.0 is equal to the network range/CIDR of 10.76.100.0/24
# for the purposes of these rules.
Sudo iptables -t nat -A POSTROUTING -s 10.76.100.0/24 ! -d 10.76.100.0/24 -j MASQUERADE
Sudo iptables -t nat -A POSTROUTING -s 10.76.101.0/24 ! -d 10.76.101.0/24 -j MASQUERADE
(9)iptables-persistent
パッケージをインストールすると、iptables
ルールを実際に記憶し、再起動時にそれらをロードできます。
Sudo apt-get install iptables-persistent`
既存のルールを保存するように求められたら、IPv4とIPv6の両方で[はい]を選択します。
(10)テストしてください!構成したプライベートネットワークの1つに別のシステムをセットアップし、セットアップしたら、インターネットと通信でき、上記でセットアップしたプライベートサブネット内に構成済みのDHCPアドレスがあることを確認してください。