web-dev-qa-db-ja.com

Ubuntu 18.04のネットプランで2つのインターフェイス間をルーティングする正しい方法

問題とネットワーク構成

現在、netplanを使用したUbuntu 18.04サーバーで、それぞれ独自のサブネットを持つ2つのインターフェイス間の通信を許可しようとしていますが、構成を正しく取得するのが困難です。 ここ は、ネットワークがどのように見えるかのグラフィカルな表現です。

Image of Network Layout


ネットワークの説明

この画像では、中央の黄色のデバイスは、静的IP 192.168.254.254およびサブネットマスク255.255.255.24enp8sインターフェイスを使用する左側のクライアント用のDHCPサーバーです。クライアント(オレンジ色のボックス)は、DHCPサーバーからIPを取得します。各クライアントは、Nginxを介してWebページもホストしています。これらのデバイスはすべてUbuntu 18.04サーバーを実行しています。各クライアントマシンでアドレスが変更される可能性はありません。

右側の黄色の「サーバー」には、172.16.0.1の静的IPと255.255.255.252のサブネットマスクで構成されたインターフェイスenp7sがあります。このインターフェイスは、同じサブネットマスクで172.16.0.2に設定されたインターフェイスを持つラップトップに接続されます。


全体的な目標

私がやろうとしているのは、ラップトップからクライアントのいずれかでWebサイトを表示できるようにすることです。これらのマシンのいずれかでインターネットに接続する必要はなく、すべての接続はイーサネットケーブルで行われます。


現在の構成

Netplan:

黄色の「サーバー」ネットプラン構成ファイル:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp7s0:
      addresses: [172.16.0.1/30]
      gateway4: 172.16.0.1
      routes:
        - to: 192.168.254.240/28
          via: 172.16.0.1
          on-link: true
    enp8s0:
      addresses: [192.168.254.254/28]
      gateway4: 192.168.254.254
      routes:
        - to: 172.16.0.0/30
          via: 192.168.254.254
          on-link: true

IP転送:

net.ipv4.ip_forward=1/etc/sysctl.confファイルでコメント解除されています。

cat /proc/sys/net/ipv4/ip_forwardを実行すると、1が返されます。

DHCPサーバー:

/ etc/default/isc-dhcp-serverINTERFACESv4enp8sと等しく設定しました。

最後に、私の/etc/dhcp/dhcpd.confは次のように構成されています。

# option definitions common to all supported networks...

default-lease-time 600;
max-lease-time 7200;

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;

# So DHCP server knows of other subnet
subnet 172.16.0.0 netmask 255.255.255.252 {
}

# DHCP server subnet
subnet 192.168.254.240 netmask 255.255.255.240 {
  range 192.168.254.241 192.168.254.253;
  option subnet-mask 255.255.255.240;
  option routers 192.168.254.254;
  option broadcast-address 192.168.254.255;
  default-lease-time 600;
  max-lease-time 7200;
}
3
John T

2つのサブネット間でトラフィックを適切にルーティングしようとするためにルートを使用しません。あなたは物事を壊すルーティングループで終わるかもしれません。

おそらく検討すべきことは、実際にシステムをルーターとして動作させ、すべての転送をNATで実行することです。これをすばやく簡単に行うには、各インターフェイスにNAT MASQUERADEを設定します。 (ただし、適切に機能しないため、所定のルートルールをヤンクする必要もあります。)

次のケースを処理するルールをファイアウォールに追加する必要があります。

  • 192.168.254.240/28-> 172.16.0.0/30
  • 172.16.0.0/30-> 192.168.254.240/28

iptablesを使用すると、次のように設定する必要があります(先頭に#が付いたコメント行は、各ルールの機能を説明するだけです)。

# Allow traffic to be forwarded from enp7s0 to enp8s0
iptables -A FORWARD -i enp7s0 -j ACCEPT
# Allow traffic to be forwarded from enp8s0 to enp7s0
iptables -A FORWARD -i enp8s0 -j ACCEPT

また、NATルールを設定する必要がありますが、これはあまり良いことではありませんが、「ルーター」をソースをマスカレードするものにする必要があります。

iptables -t nat -A POSTROUTING -o enp7s0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o enp8s0 -j MASQUERADE

これにより、サブネット間の双方向NATトラバーサルが許可されます。将来のためにsaveこれらのルールを確認してください。

これが機能しない場合はお知らせください。それが発生した場合は、問題をより深く掘り下げます。

0
Thomas Ward