특정 VPN 클라이언트를 통해 특정 VPN 트래픽을 라우팅하려면 어떻게 해야 합니까?

특정 VPN 클라이언트를 통해 특정 VPN 트래픽을 라우팅하려면 어떻게 해야 합니까?

OpenVPN 소프트웨어를 기반으로 하는 VPN 네트워크가 있습니다. 이 VPN 네트워크의 특정 클라이언트(VPN 클라이언트 IP 주소)를 통해 VPN 네트워크의 모든 네트워크 트래픽을 라우팅해야 합니다. 여기서 대상 IP는 특정 국가, 즉 기본 인터넷 인터페이스(PPPoE) 구성 NAT( 가장 무도회). 이 모든 트래픽에 대해 이 VPN 클라이언트(Mikrotik 라우터 - PPPoE 인터페이스)가 소유한 공용 동적 IP 주소를 가져와야 합니다. 그래서 VPN 서버에서 iptables mangle 규칙을 만들고 geoip iptables 모듈을 사용했습니다.

iptables -A PREROUTING -t mangle -i tun0 -m geoip --destination-country COUNTRY_CODE -j MARK --set-mark 1

따라서 해당 특정 국가의 대상 IP를 가진 클라이언트의 모든 트래픽에 플래그를 지정합니다. 다음에는 이것을 사용해 보았습니다.해결책: 특정 라우팅 테이블을 생성하고 기본 경로를 추가합니다. 그러나 기본 경로는 이 네트워크의 다음 홉만 될 수 있습니다. 그래서 이 명령을 사용할 때:

ip route add default via specific_VPN_client dev tun0 table CountryRoute 

다음 오류가 발생합니다.

RTNETLINK answers: Network is unreachable

특정 트래픽을 특정 클라이언트로 라우팅할 수 있지만 다음 홉으로는 라우팅할 수 없습니까?

나는 또한 이 iptables 규칙을 시도했습니다:

iptables -A PREROUTING -i tun0 -m geoip --destination-country COUNTRY_CODE -j DNAT --to-destination Mikrotik_VPN_IP

그러나 트래픽은 Mikrotik 라우터에서 끝납니다. 해당 라우터에서 이 문제를 해결할 수 있을까요?

OpenVPN 서버(10.1.1.1) 라우팅 테이블:

default via PUBLIC_IP_VPN_SERVER dev eth0
10.1.1.0/24 via 10.1.1.2 dev tun0
10.1.1.2 dev tun0  proto kernel  scope link  src 10.1.1.1
PUBLIC_IP_VPN_SERVER/24 dev eth0  proto kernel  scope link  src PUBLIC_IP_VPN_SERVER

고쳐 쓰다

나는 이것을 사용했다해결책CountryRoute 테이블에 기본 경로를 추가하는 데 사용됩니다. 따라서 CountryRoute 테이블의 내용은 다음과 같습니다.

default via 10.1.1.30 dev tun0 

활성 iptables mangle 규칙(위에서 언급)과 IP 라우팅 규칙이 있습니다.

ip rule show
0:      from all lookup local
32765:  from all fwmark 0x1 lookup CountryRoute
32766:  from all lookup main
32767:  from all lookup default

그러나 태그가 지정된 트래픽은 여전히 ​​10.1.1.1 - OpenVPN 서버에서 끝나며 Mikrotik 라우터로 계속 이어지지 않습니다.

업데이트 2

현재 값:

default via PUBLIC_IP_VPN_SERVER dev eth0
10.0.0.0/24 dev veth0  proto kernel  scope link  src 10.0.0.1
10.0.1.0/24 dev veth3  proto kernel  scope link  src 10.0.1.2
10.1.1.0/24 via 10.1.1.30 dev tun0
10.1.1.30 dev tun0  proto kernel  scope link  src 10.1.1.1
PUBLIC_IP_VPN_SERVER/24 dev eth0  proto kernel  scope link  src PUBLIC_IP_VPN_SERVER

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:10.1.1.1  P-t-P:10.1.1.30  Mask:255.255.255.255
          inet6 addr: PUBLIC_IP_VPN_SERVER/64 Scope:Global
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:141437 errors:0 dropped:0 overruns:0 frame:0
          TX packets:230785 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:14693683 (14.0 MiB)  TX bytes:240387315 (229.2 MiB)

ip route show table CountryRoute
default via 10.1.1.30 dev tun0

업데이트 3

ip -4 route show table all
default via 10.0.0.2 dev veth0 table CountryRoute
default via PUBLIC_IP_VPN_SERVER_gateway dev eth0 onlink
10.0.0.0/24 dev veth0 proto kernel scope link src 10.0.0.1
10.0.1.0/24 dev veth3 proto kernel scope link src 10.0.1.2
10.1.1.0/24 via 10.1.1.30 (Mikrotik_VPN_IP) dev tun0
10.1.1.30 dev tun0 proto kernel scope link src 10.1.1.1
PUBLIC_IP_VPN_SERVER/24 dev eth0 proto kernel scope link src PUBLIC_IP_VPN_SERVER
broadcast 10.0.0.0 dev veth0 table local proto kernel scope link src 10.0.0.1
local 10.0.0.1 dev veth0 table local proto kernel scope host src 10.0.0.1
broadcast 10.0.0.255 dev veth0 table local proto kernel scope link src 10.0.0.1
broadcast 10.0.1.0 dev veth3 table local proto kernel scope link src 10.0.1.2
local 10.0.1.2 dev veth3 table local proto kernel scope host src 10.0.1.2
broadcast 10.0.1.255 dev veth3 table local proto kernel scope link src 10.0.1.2
local 10.1.1.1 dev tun0 table local proto kernel scope host src 10.1.1.1
broadcast PUBLIC_IP_VPN_SERVER_networkIP dev eth0 table local proto kernel scope link src PUBLIC_IP_VPN_SERVER
local PUBLIC_IP_VPN_SERVER dev eth0 table local proto kernel scope host src PUBLIC_IP_VPN_SERVER
broadcast PUBLIC_IP_VPN_SERVER_broadcastIP dev eth0 table local proto kernel scope link src PUBLIC_IP_VPN_SERVER
broadcast 127.0.0.0 dev lo table local proto kernel scope link src 127.0.0.1
local 127.0.0.0/8 dev lo table local proto kernel scope host src 127.0.0.1
local 127.0.0.1 dev lo table local proto kernel scope host src 127.0.0.1
broadcast 127.255.255.255 dev lo table local proto kernel scope link src 127.0.0.1

업데이트 4

ip netns exec Mikrotik ip -4 route show table all
default via 10.0.1.2 dev veth2
10.0.0.0/24 dev veth1 proto kernel scope link src 10.0.0.2
10.0.1.0/24 dev veth2 proto kernel scope link src 10.0.1.1
10.1.1.30 via 10.0.1.2 dev veth2
broadcast 10.0.0.0 dev veth1 table local proto kernel scope link src 10.0.0.2
local 10.0.0.2 dev veth1 table local proto kernel scope host src 10.0.0.2
broadcast 10.0.0.255 dev veth1 table local proto kernel scope link src 10.0.0.2
broadcast 10.0.1.0 dev veth2 table local proto kernel scope link src 10.0.1.1
local 10.0.1.1 dev veth2 table local proto kernel scope host src 10.0.1.1
broadcast 10.0.1.255 dev veth2 table local proto kernel scope link src 10.0.1.1

업데이트 5

# ip netns exec Mikrotik traceroute -I 10.1.1.30
traceroute to 10.1.1.30 (10.1.1.30), 30 hops max, 60 byte packets
 1  10.0.1.2 (10.0.1.2)  0.053 ms  0.016 ms  0.013 ms
 2  10.1.1.30 (10.1.1.30)  18.868 ms  38.147 ms  98.549 ms

# ip netns exec Mikrotik traceroute 10.1.1.30
traceroute to 10.1.1.30 (10.1.1.30), 30 hops max, 60 byte packets
 1  10.0.1.2 (10.0.1.2)  0.056 ms  0.019 ms  0.016 ms
 2  10.1.1.30 (10.1.1.30)  19.044 ms  37.808 ms  56.347 ms

# ip netns exec Mikrotik traceroute COUNTRY_PUBLIC_IP_MARKED_TRAFFIC
traceroute to COUNTRY_PUBLIC_IP_MARKED_TRAFFIC (COUNTRY_PUBLIC_IP_MARKED_TRAFFIC), 30 hops max, 60 byte packets
 1  10.0.1.1 (10.0.1.1)  3052.269 ms !H  3052.212 ms !H  3052.185 ms !H

# ip netns exec Mikrotik traceroute -I COUNTRY_PUBLIC_IP_MARKED_TRAFFIC
traceroute to COUNTRY_PUBLIC_IP_MARKED_TRAFFIC (COUNTRY_PUBLIC_IP_MARKED_TRAFFIC), 30 hops max, 60 byte packets
 1  * * *
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  * 10.0.1.1 (10.0.1.1)  3067.929 ms !H  3067.883 ms !H

당신의 도움을 주셔서 감사합니다.

답변1

Mikrotik 트래픽을 수신하고 NAT를 통해 실제 Mikrotik로 다시 라우팅하도록 네트워크 네임스페이스를 설정하는 것은 10.0.0.0/24를 네임스페이스로 "들어간" 후 10.0.1.0/24를 다시 사용한 다음 Mikrotik_VPN_IP를 통한 라우팅으로 수행할 수 있다고 생각합니다.

ip netns add Mikrotik
ip link add veth0 type veth peer name veth1
ip link set veth1 netns Mikrotik
ip link add veth2 type veth peer name veth3
ip link set veth2 netns Mikrotik
ifconfig veth0 10.0.0.1/24 up
ifconfig veth3 10.0.1.2/24 up
ip netns exec Mikrotik ifconfig veth1 10.0.0.2/24 up
ip netns exec Mikrotik ifconfig veth2 10.0.1.1/24 up
ip netns exec Mikrotik iptables -t nat -A POSTROUTING -o veth2 -j MASQUERADE
ip netns exec Mikrotik ip route add Mikrotik_VPN_IP via 10.0.1.2
ip netns exec Mikrotik ip route add default via Mikrotik_VPN_IP dev veth2 onlink
ip netns exec Mikrotik iptables -A PREROUTING -t mangle -j MARK --set-mark 0

이는 10.0.0.2 경로를 통해 Microtek 라우터와 주고받는 트래픽 경로를 제공합니다. 선택한 트래픽을 10.0.0.2를 통해 전달하고 나머지는 "일반"/기본 경로를 통해 전달하려면 규칙 기반 라우팅도 필요합니다.

관련 정보