L2TP サーバー上のクライアントに割り当てられたパブリック IPv4 との間でインターネット トラフィックを取得するために必要なルートを設定するにはどうすればよいでしょうか。

L2TP サーバー上のクライアントに割り当てられたパブリック IPv4 との間でインターネット トラフィックを取得するために必要なルートを設定するにはどうすればよいでしょうか。

2 つのイーサネット インターフェイスを持ち、L2TP サーバー (accel-ppp を使用) をホストしている Ubuntu Server 20.04 を実行しているサーバーがあります。

「eno1」には単一のパブリック IPv4 アドレスが割り当てられています。

「eno2」は /26 パブリック IPv4 ブロックにアクセスでき、これを別の場所から L2TP サーバー経由で利用したいと考えています。詳細は下に記載されています。

ここで私がやろうとしているのは、別の場所にあるルーターが L2TP サーバーに接続し、前述の /26 パブリック IPv4 を分割して、パブリック IPv4 と /27 パブリック IPv4 をルーティングできるようにすることです。たとえば、xx161.64/27 などです。

L2TP サーバーに接続されたルーターの IP や、ルーターの LAN 経由で割り当てた /27 IPv4 に対して L2TP サーバーから ping を実行することはできますが、インターネットへのルートや、おそらく L2TP サーバー自身のゲートウェイ IP (xx161.122) を超えるルートを取得する方法がわかりません。

えの1

IP address:  x.x.176.62 (public IPv4)
Subnet mask: 255.255.255.0
Gateway IP:  x.x.176.254

エノ2

IP address:  x.x.161.125 (public IPv4)
Subnet mask: 255.255.255.252 (split from what is actually a /26)
Gateway IP:  x.x.161.126

ルーターに割り当てられた IP アドレスは L2TP サーバーに接続していますが、現在はインターネットにアクセスできないか、xx161.122 (L2TP サーバーのゲートウェイ IP アドレスだと思います) を超えることができないようです。

x.x.161.121/30
x.x.161.64/27

この Ubuntu サーバーに accel-ppp をインストールし、L2TP サーバーとして構成しました。/etc/accel-ppp.conf次のとおりです。

[modules]
log_file

pptp
l2tp

auth_mschap_v2
auth_mschap_v1
auth_pap

chap-secrets

ippool

pppd_compat

[core]
log-error=/var/log/accel-ppp/core.log
thread-count=4

[common]
single-session=replace

[ppp]
verbose=1
min-mtu=1280
mtu=1400
mru=1400
ipv4=require
ipv6=deny
ipv6-intf-id=0:0:0:1
ipv6-peer-intf-id=0:0:0:2
ipv6-accept-peer-intf-id=1
lcp-echo-interval=1
lcp-echo-failure=5
lcp-echo-timeout=120
unit-cache=1

[pptp]
verbose=1
#echo-interval=30
#ip-pool=pptp
#ipv6-pool=pptp
#ipv6-pool-delegate=pptp
ifname=pptp%d

[l2tp]
verbose=1
ifname=l2tp%d

[dns]
dns1=8.8.8.8
dns2=8.8.4.4

[client-ip-range]
disable

[ip-pool]
gw-ip-address=x.x.161.122
attr=Framed-Pool
x.x.161.121/30

[log]
log-file=/var/log/accel-ppp/accel-ppp.log
log-emerg=/var/log/accel-ppp/emerg.log
log-fail-file=/var/log/accel-ppp/auth-fail.log
copy=1
level=3

[pppd-compat]
verbose=1

[chap-secrets]
chap-secrets=/etc/ppp/chap-secrets

現在の IP ルート:

default via x.x.161.126 dev eno2 proto static
default via x.x.176.254 dev eno1 proto dhcp src x.x.176.62 metric 100
x.x.176.0/24 dev eno1 proto kernel scope link src x.x.176.62
x.x.176.254 dev eno1 proto dhcp scope link src x.x.176.62 metric 100
x.x.161.64/27 via x.x.161.121 dev l2tp0
x.x.161.121 dev l2tp0 proto kernel scope link src x.x.161.122
x.x.161.124/30 dev eno2 proto kernel scope link src x.x.161.125

現在のルート:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         x.x.161.126     0.0.0.0         UG    0      0        0 eno2
default         x.x.176.254     0.0.0.0         UG    100    0        0 eno1
x.x.176.0       0.0.0.0         255.255.255.0   U     0      0        0 eno1
x.x.176.254     0.0.0.0         255.255.255.255 UH    100    0        0 eno1
x.x.161.64      x.x.161.121     255.255.255.224 UG    0      0        0 l2tp0
x.x.161.121     0.0.0.0         255.255.255.255 UH    0      0        0 l2tp0
x.x.161.124     0.0.0.0         255.255.255.252 U     0      0        0 eno2

現在のifconfig:

eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet x.x.176.62  netmask 255.255.255.0  broadcast x.x.176.255
        inet6 x:x:x:x::  prefixlen 56  scopeid 0x0<global>
        inet6 fe80::d250:99ff:feda:91b6  prefixlen 64  scopeid 0x20<link>
        ether d0:50:99:da:91:b6  txqueuelen 1000  (Ethernet)

eno2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet x.x.161.125  netmask 255.255.255.252  broadcast x.x.161.127
        inet6 fe80::d250:99ff:feda:91b5  prefixlen 64  scopeid 0x20<link>
        ether d0:50:99:da:91:b5  txqueuelen 1000  (Ethernet)

l2tp0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1400
        inet 198.244.161.122  netmask 255.255.255.255  destination x.x.161.121
        ppp  txqueuelen 3  (Point-to-Point Protocol)

たとえば、ルーターの IP アドレス xx161.121 がインターネットにアクセスでき、インターネットからもアクセスできるようにするにはどうすればよいでしょうか。おそらく、元の /26 IPv4 ブロック全体のゲートウェイ IP アドレスである xx161.126 へのルートを何らかの方法で設定する必要があるでしょう。

もっと簡単な、または別のアプローチがあれば教えてください。NAT は、私がやろうとしていることに反すると思われるため、実行したくありません。

うまく説明でき、十分な詳細を提供できたと思います。さらに詳細が必要な場合は、お気軽にお問い合わせください。このことを理解しようと 2 日間ほど取り組んできました。ルートを変更してみるのは、私にとっては初めての経験です。ご協力いただければ幸いです。

編集: ここで回答が得られる見込みはなさそうなので、見積もりが法外な値段でなければ、この作業のために雇える専門家を探すしかないかもしれません。もし誰かがこの質問を読んで答えを知っているなら、解決策を教えていただけると本当にありがたいです! ありがとうございます。

答え1

さらに実験を重ねた結果、少し遅かったとはいえ、ポリシー ベース ルーティングの重要性と有用性を理解し始めたと思います。幸いにも、今では、回りくどい方法ではありますが、望みどおりの動作を完全に実現できるようになりました。

私は CentOS で SoftEther VPN Server (L2TP) を使用しています。これにより、現在 32 の接続/ログインが設定されており、Firebrick ではそれぞれ独自のルーティング テーブルがあります。また、それぞれに固有のパブリック IPv4 アドレスがあります。SoftEther は、NAT を使用せずにインターネット接続を正常に確立できた唯一の方法です。これは、SoftEther が仮想ネットワーク インターフェイス (O/S には非表示) を作成し、L2TP 接続とイーサネット インターフェイス (例: eth1/eno2) をイーサネット レベルでブリッジするためだと考えています。

これにより、Firebrick のファイアウォール (ルーター) に、各 L2TP 接続のさまざまなルーティング テーブルと LAN のポートのルーティング テーブルの間を行き来するように、またその逆を行うように、数十のルールを通じて指示しました。LAN インターフェイスは引き続きパブリック IPv4 /26 を使用しますが、現実的には、L2TP サーバー接続に割り当てられた IP アドレスに直接接続されていません。そのパブリック IPv4 /26 ブロックの最初の IP は実際にはパブリック向けではなく、LAN ポートのゲートウェイ IP としてのみ使用され、その IP はインターネットからアクセスできません。これは機能しますが、前述したように、回りくどい方法です。まだ予備の IP アドレスもあるので、後でログインを追加できます。

決して最善の解決策とは言えませんし、少し見苦しいですが、機能しているようです。

関連情報