일반적인 OpenVPN 라우팅 명령

일반적인 OpenVPN 라우팅 명령

아래와 같은 상황이 발생했습니다. 1- 2개의 OpenVPN 서버(서버 A 및 서버 B)가 있습니다.

2- 클라이언트는 직접 LAN이 아닌 VPN을 통해 각 서버에 연결됩니다.

3- 서버 B는 VPN 클라이언트로 서버 A에 연결됩니다.

4- 서버 B는 2개의 OpenVPN 인스턴스를 실행합니다.

5- Asuume 노트북 B는 VPN을 통해 서버 B에 연결되어 있습니다. (적어도) 서버 A에 연결하려면 노트북이 필요합니다.

6- 서버 A VPN DHCP는 10.8.0.0/24입니다.

7- 서버 B VPN DHCP는 172.30.0.0/16입니다.

8- 서버 B에는 고정 IP 10.8.0.101(VPN 클라이언트)이 있습니다.

  • 문제는 랩톱 B에서 서버 A에 연결할 수 없다는 것입니다. 그리고 서버 A는 클라이언트 IP가 아닌 VPN 서버 IP의 서버 B에 연결할 수 없습니다.

네트워크 구조(이미지)

네트워킹 구성은 다음과 같습니다.

서버 A 구성

    [root@localhost ~]# ifconfig
eth0      inet addr:X.X.X.X  Bcast:X.X.X.255  Mask:255.255.255.0


eth0:0    inet addr:X.X.X.X  Bcast:X.X.255.255  Mask:255.255.0.0


lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0


tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:10.8.0.1  P-t-P:10.8.0.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:629066 errors:0 dropped:0 overruns:0 frame:0
          TX packets:416252 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:136006302 (129.7 MiB)  TX bytes:114377768 (109.0 MiB)

서버 B

    [root@vps8887 ~]# ifconfig
eth0      inet addr:X.X.X.X  Bcast:X.X.X.255  Mask:255.255.255.0

eth0:0    inet addr:X.X.X.X  Bcast:X.X.X.255  Mask:255.255.255.0

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0


tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:172.30.0.1  P-t-P:172.30.0.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:69 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:4140 (4.0 KiB)  TX bytes:240 (240.0 b)

tun1      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:10.8.0.101  P-t-P:10.8.0.102  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:34 errors:0 dropped:0 overruns:0 frame:0
          TX packets:105 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:2856 (2.7 KiB)  TX bytes:8820 (8.6 KiB)

서버 A에 대한 라우팅:

[root@localhost ~]# netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
10.8.0.2        *               255.255.255.255 UH        0 0          0 tun0
10.8.0.0        10.8.0.2        255.255.255.0   UG        0 0          0 tun0
192.168.1.0     *               255.255.255.0   U         0 0          0 eth0
172.16.0.0      *               255.255.0.0     U         0 0          0 eth0
169.254.0.0     *               255.255.0.0     U         0 0          0 eth0
default         192.168.1.1     0.0.0.0         UG        0 0          0 eth0

서버 B에 대한 라우팅:

 [root@vps8887 ~]# netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
10.8.0.102      *               255.255.255.255 UH        0 0          0 tun1
172.30.0.2      *               255.255.255.255 UH        0 0          0 tun0
X.X.X.0    *               255.255.255.0   U         0 0          0 eth0
10.8.0.0        10.8.0.101      255.255.255.0   UG        0 0          0 tun1
X.X.X.0   *               255.255.255.0   U         0 0          0 eth0
172.30.0.0      172.30.0.2      255.255.0.0     UG        0 0          0 tun0
link-local      *               255.255.0.0     U         0 0          0 eth0
default         X.X.X.1    0.0.0.0         UG        0 0          0 eth0
default         X.X.X.1   0.0.0.0         UG        0 0          0 eth0

다음 명령을 추가할 때 서버 A에 라우팅을 추가하려고 할 때 문제가 나타납니다.

route add -net 172.30.0.0/16 gw 10.8.0.101

다음 오류가 나타납니다.

"SIOCADDRT: 네트워크에 연결할 수 없습니다."

serverA 포트 1194에 대한 OpenVPN 구성

proto udp

dev tun

ca ca.crt

cert server.crt

key server.key

dh dh1024.pem

client-to-client

duplicate-cn

server 10.8.0.0 255.255.255.0

client-config-dir ccd

push "dhcp-option DNS 10.8.0.1"

status openvpn-status.log

keepalive 10 120

comp-lzo

persist-key

persist-tun

crl-verify /etc/openvpn/crl.pem

verb 3

================ Server B Client ccd ================
push "dhcp-option DNS 8.8.8.8"

ifconfig-push 10.8.0.101 10.8.0.102

=====================================================

서버 B에 대한 OpenVPN 구성

======================= Server B ( Server Config )======================== 

port 1194

proto udp 

dev tun

ca ca.crt

cert server.crt

key server.key

dh dh2048.pem

client-to-client

duplicate-cn

server 172.30.0.0 255.255.0.0

push " route 10.8.0.0 255.255.255.0 "

status openvpn-status.log

keepalive 10 120

comp-lzo

persist-key

persist-tun

verb 3

==============================================================================

================= Server B ( Client Config )==============================

client

dev tun

proto udp

remote serverA 1194

resolv-retry infinite

nobind

persist-key

persist-tun

ca ca.crt

cert client.crt

key client.key

route-nopull

route 10.8.0.0 255.255.255.0 10.8.0.101

comp-lzo

verb 5

===============================================================================

마지막으로, 서로 통신하려면 이 사이트가 필요합니다.

답변1

일반적인 OpenVPN 라우팅 명령

노선

route명령은 서버 구성에 들어가 서버에 자체 커널 라우팅 테이블에 경로를 추가하도록 지시합니다. 지시문 route에 서브넷에 대한 명령을 추가할 필요는 없지만 서버가 처리해야 하는 다른 모든 서브넷에 대한 명령을 server추가해야 합니다 . route기본적으로 이는 커널에 이러한 서브넷을 openvpn 서버로 보내도록 지시합니다. 예를 들어:

# serverA.conf (just a fragment)
server 10.8.0.0 255.255.255.0
...
route 172.30.0.0 255.255.255.0 # Add a route to the kernel routing table

루트

iroute명령은 설명된 대로 openvpn 서버가 서브넷을 담당하는 클라이언트를 알 수 있도록 openvpn에 대한 "내부" 경로를 생성합니다.여기그리고여기. 패킷이 커널 라우팅 테이블에 도달하기 전에 openvpn은 tun/tap 장치에서 들어오는 패킷의 암호를 해독하고 검사하여 어떻게 해야 할지 확인합니다. iroute 명령이 없으면 서버는 이를 인식하지 못합니다.

# ccd/ServerB.conf
iroute 172.30.0.0

" 경로 ... "를 누르십시오.

push명령은 다른 작업에도 사용되지만 라우팅을 위해서는 push클라이언트에 대한 서브넷 경로가 필요합니다. 그러면 클라이언트가 VPN 서버로 트래픽을 보내기 위해 커널 라우팅 테이블을 변경하도록 지시합니다. 이것이 없으면 클라이언트는 프라이빗 서브넷 10.8.0.0에서 172.30.0.0까지 패킷을 가져오는 방법을 알 수 없습니다. 이는 ccd/client에 들어가거나 모든 클라이언트에 보편적인 경우 서버 구성에만 들어가야 합니다.

# ServerA.conf (more of the fragment)
server 10.8.0.0 255.255255.0
...
route 172.30.0.0 255.255.255.0 # add the route to the server's kernel
push "route 172.30.0.0 255.255.255.0" # add the route to the clients

클라이언트 대 클라이언트

client-to-client명령은 클라이언트가 서로 통신할 수 있음을 서버에 알려줍니다. 나는 이것이 기본적으로 주석 처리되어 있으며 필요할 것이라고 믿습니다.

커널 IP 전달

이는 OpenVPN 구성이 아니며 다음은 Linux에만 해당됩니다. 하지만 이는 OpenVPN 서버를 실행하는 모든 사람에게 중요합니다. 각 서버에는 다음과 같이 커널에서 IP 전달이 활성화되어 있어야 합니다.이것. 또한 방화벽 규칙이 전달을 방해하지 않는지 확인하세요.

설정과 관련하여

지시문이 누락된 것 같습니다 iroute. 서버 B의 ccd 파일에 항목이 필요합니다. 이 iroute명령은 어떤 클라이언트가 해당 서브넷에 대해 알고 있는지 openvpn 서버에 알려줍니다.

# ccd/ServerB
iroute 172.30.0.0 255.255.255.0

편집: 다시 보니 또 다른 점이 발견되었습니다.

또한 서버 A는 서버 B에 대한 경로를 클라이언트에 푸시하지 않는 것으로 보입니다.

# ServerA config
push " route 172.30.0.0 255.255.255.0 "

저는 openvpn을 실행하는 두 개의 서버로 이 작업을 수행합니다. 머신에 경로를 수동으로 추가할 필요가 없습니다. openvpn 구성이 정확하면 서버 B는 서버 A에 iroute. 서버 A는 클라이언트에게 push " route ... ". 그리고 이미 서버 B가 10.8.0.0에 대한 경로를 푸시하고 있습니다.

이것이 작동하는지 테스트하려면 ping경로를 추가하지 않는 것이 좋습니다.

답변2

나는 그것을 스스로 해결합니다. 중요한 것은 "ipforwarding"이 양쪽에서 활성화되지 않았습니다. 이것이 가장 큰 문제입니다. iroute가 명확하지 않아서 다음 기사를 보았습니다. OpenVPN 및 경로 라우팅은 모두 OpenVPN에 의해 ​​수행됩니다. 수동으로 라우팅이 필요하지 않습니다. 아래 그림과 같이:

솔루션이 포함된 구조

마지막으로 도움을 주신 Danger Ginger에게 감사드립니다.

관련 정보