내 L2TP 서버에 할당된 공용 IPv4를 사용하여 클라이언트와 인터넷 트래픽을 주고받는 데 필요한 라우팅을 어떻게 수행합니까?

내 L2TP 서버에 할당된 공용 IPv4를 사용하여 클라이언트와 인터넷 트래픽을 주고받는 데 필요한 라우팅을 어떻게 수행합니까?

두 개의 이더넷 인터페이스가 있고 L2TP 서버(accel-ppp 사용)를 호스팅하는 Ubuntu Server 20.04를 실행하는 서버가 있습니다.

"eno1"에는 공용 IPv4 주소가 할당됩니다.

"eno2"는 L2TP 서버를 통해 다른 위치에서 사용하려는 /26 공용 IPv4 블록에 액세스할 수 있습니다. 자세한 내용은 아래를 참조하세요.

이제 내가 원하는 것은 L2TP 서버에 연결할 수 있고 공용 IPv4를 가질 수 있을 뿐만 아니라 앞에서 언급한 /26 공용 IPv4를 분할하여 /27 공용 IPv4로 라우팅할 수 있는 다른 위치에 라우터를 두는 것입니다. 예를 들어 xx161.64/27입니다.

L2TP 서버에서 L2TP 서버에 연결된 라우터의 IP와 라우터 LAN을 통해 할당된 /27 IPv4를 핑할 수 있지만 인터넷이나 다른 네트워크로의 경로를 얻는 방법을 모르겠습니다. 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를 하고 싶지 않습니다. 왜냐하면 그것이 내가 하고 싶은 일을 망칠 것이라고 생각하기 때문입니다.

매우 명확하고 충분한 세부 정보를 제공하였기를 바랍니다. 더 자세한 내용이 필요하면 문의하시기 바랍니다. 나는 지난 이틀 동안 이 문제로 어려움을 겪었습니다. 코스를 바꾸는 것은 나에게 조금 새로운 일이었습니다. 도움을 주셔서 미리 감사드립니다!

편집: 여기서 답변을 얻을 희망이 많지 않은 것 같으므로 견적이 터무니없이 비싸지 않다는 가정 하에 이 작업을 위해 고용할 전문가를 찾는 것을 고려해야 할 수도 있습니다. 누군가가 실제로 이 질문을 읽고 답을 알고 있다면 귀하의 솔루션을 듣고 매우 감사하겠습니다! 감사해요.

답변1

추가 실험을 통해 조금 늦었지만 정책 기반 라우팅의 중요성과 유용성을 이해하기 시작한 것 같습니다. 좋은 소식은 이제 내가 원했던 작업을 정확하게 수행했지만 우회적인 방식으로 수행했다는 것입니다.

SoftEther VPN 서버(L2TP)와 함께 CentOS를 사용하고 있습니다. 이를 통해 현재 Firebrick에 자체 라우팅 테이블이 있는 32개의 연결/로그인 설정이 있습니다. 각각에는 고유한 공용 IPv4 주소가 있습니다. SoftEther는 NAT 없이 성공적으로 인터넷에 연결할 수 있는 유일한 방법입니다. SoftEther는 이더넷 수준에서 L2TP 연결과 이더넷 인터페이스(예: eth1/eno2)를 연결하는 가상 네트워크 인터페이스(OS에 숨겨진)를 생성하기 때문이라고 생각합니다. .

이런 식으로 Firebrick의 방화벽(내 라우터)에 각 L2TP 연결에 대한 다양한 라우팅 테이블과 내 LAN 포트에 있는 라우팅 테이블 사이를 이동하거나 그 반대로 이동하도록 지시하는 수십 개의 규칙이 있습니다. LAN 인터페이스는 여전히 공용 IPv4/26을 사용하지만 실제로는 L2TP 서버 연결에 할당된 IP 주소에 직접 연결되지 않습니다. 이 공용 IPv4/26 블록의 첫 번째 IP는 실제로 공용이 아니며 LAN 포트의 게이트웨이 IP로만 사용되며 인터넷에서 액세스할 수 없습니다. 내가 말했듯이 이것은 우회적인 방법이지만 작동합니다. 또한 나중에 더 많은 로그인을 추가할 수 있도록 무료 IP 주소도 있습니다.

이것은 결코 최선의 해결책은 아니며 약간 보기에도 좋지 않지만 작동하는 것 같습니다.

관련 정보