StrongSwan VPN에서 로컬 서브넷 제외

StrongSwan VPN에서 로컬 서브넷 제외

개인 서브넷이 있는 추가 로컬 전용 이더넷 인터페이스가 있는 컴퓨터가 있습니다. StrongSwan VPN이 설정되면 해당 서브넷에 액세스할 수 없습니다.

이는 로컬 '왼쪽' 구성입니다(에 의해 설정됨).알고):

conn ikev2-<rightip>
    fragmentation=yes
    rekey=no
    dpdaction=clear
    keyexchange=ikev2
    compress=no
    dpddelay=35s

    ike=aes128gcm16-prfsha512-ecp256!
    esp=aes128gcm16-ecp256!

    right=<rightip>
    rightid=<rightip>
    rightsubnet=0.0.0.0/0
    rightauth=pubkey

    leftsourceip=%config
    leftauth=pubkey
    leftcert=daves.crt
    leftfirewall=yes
    left=%defaultroute

    auto=add

문제의 서브넷은 10.0.0.0/24입니다. %defaultroute는 192.168.0.0/24의 주소로 확인됩니다.

'left'와 'leftsubnet'은 이에 대한 올바른 옵션이 아닌 것 같지만 더 좋은 옵션은 없습니다. 나는 leftsubnet을 10.0.0.0/24와!10.0.0.0/24로 설정해 보았습니다.

StronSwan VPN 연결에서 로컬 서브넷을 어떻게 제외합니까?

연결의 경로 구성을 어떻게 검사합니까?

답변1

당신은 설정할 수 있습니다통과 정책.

업데이트: @ecdsa가 언급한 대로 Strongswan >= 5.5.2에는더 쉬운 방법, 귀하의 버전에서 사용할 수 있는지 끝 부분을 살펴보십시오.

몇 가지 임의의 IP를 사용한 예입니다. 변경 및 터널링 전:

# ip route get 10.0.0.55
10.0.0.55 dev lxcbr0 src 10.0.0.77 uid 0 

터널을 설정한 후 문제는 다음과 같습니다.

# ip route get 10.0.0.55
10.0.0.55 via 192.168.0.1 dev eth0 table 220 src 192.168.0.44 uid 0 

이 구성을 다음에 추가 /etc/ipsec.conf:

conn ignorelan
    left=127.0.0.1 #prevents usage in peers selection algorithm
    leftsubnet=10.0.0.0/24
    rightsubnet=10.0.0.0/24
    authby=never
    type=passthrough
    auto=route

다시 로드합니다.

# ipsec reload

즉시 활성화해야 합니다. 그렇지 않은 경우 (이번에는) 다음을 수행할 수 있습니다.

# ipsec route ignorelan
'ignorelan' shunt PASS policy installed

어쨌든 나중에 다시 시작할 때 사용해야 합니다. 이제 터널 외에 다음이 있습니다.

# ipsec status 
Shunted Connections:
     ignorelan:  10.0.0.0/24 === 10.0.0.0/24 PASS

[...]

이제 터널이 설정되었는지 여부에 관계없이 올바른 경로로 돌아옵니다(strongswan에서 처리하므로 더 이상 테이블 메인이 아닌 테이블 220에 있음).

# ip route get 10.0.0.55
10.0.0.55 dev lxcbr0 table 220 src 10.0.0.77 uid 0 
    cache 

0.0.0.0/0에 대한 터널을 사용하면 표 220에 다음과 유사한 결과가 나타납니다.

# ip route show table 220
default via 192.168.0.1 dev eth0 proto static src 192.168.0.44 
10.0.0.0/24 dev lxcbr0 proto static src 10.0.0.77 
192.168.0.0/24 dev eth0 proto static src 192.168.0.44 

패스스루 설정에 실제와 일치하는 경로(예: 잘못된 넷마스크)를 넣지 않으면 "션트"에 대해 잘못된 결과(예상 소스 IP와 같지만 잘못된 네트워크 카드를 통과함)가 예상되므로 주의하세요.


업데이트:우회 LAN 플러그인특히 동적 환경에서 사용하기가 더 쉽습니다.

새 항목을 추가하는 대신 conn활성화하십시오(예: Debian Buster(안정적이지 않음)에서 /etc/strongswan.d/charon/bypass-lan.conf를 편집하고 load=yes를 설정합니다(예: charon.plugins.bypass-lan.load). =예) ). 기본적으로 모든 인터페이스는 전환됩니다. 즉, 터널이 설정되지만 기본적으로 사용되지는 않습니다. 따라서 interfaces_ignore또는 interfaces_use그에 따라 설정하십시오. interfaces_ignore인터페이스에 대해 설정해야 합니다 .원하지 않는다터널을 우회하거나, 그렇지 않으면 interfaces_use인터페이스에 대해 설정합니다.원하다터널을 우회합니다. 예:

interface_use = lxcbr0

ipsec start이전 방법과 마찬가지로 이 예에서는 다음을 수행합니다 .

# ip route show table 220
10.0.0.0/24 dev lxcbr0 proto static src 10.0.0.77

(그러나 IPv6가 사용 중인 경우 이 인터페이스와 관련된 IPv6 경로도 고려합니다).


또 다른 (해킹) 방법은 Strongswan의 테이블 220을 우회하는 것입니다. Strongswan 설정 대신 다음을 사용하여 동일한 결과를 얻을 수 있습니다(이 질문 및 예에 대해).

ip rule add priority 219 to 10.0.0.0/24 lookup main

Strongswan의 테이블 220을 사용하여 다음 항목을 계속하는 대신 대상 네트워크의 기본(기본) 라우팅 테이블을 사용합니다.

관련 정보