나는 아웃바운드 패킷을 보안 협회에 맞추기 위해 일주일 넘게 노력해왔습니다.
내 (예제) 시나리오는 다음과 같습니다.
- 랜: 1.1.1.0/24
- FreeBSD 인터페이스: xn0(Amazon EC2 인스턴스)
- NAT 트래픽의 가상 주소는 2.2.2.2/32에서 옵니다.
- 목적지 도착: 3.3.3.3/32
문제 설명
FreeBSD Box에 모든 SA가 실행 중이라는 사실에도 불구하고 pf 또는 ipfw를 사용하여 패킷을 nat하려는 시도가 작동하지 않고 nat된 패킷이 기본 라우팅 인터페이스를 사용하여 계속 흐르고 ipsec 터널에 들어 가지 않습니다. .
다음은 SA를 사용하는 예입니다.
$ ipsec status vpn
vpn{1}: INSTALLED, TUNNEL, reqid 1, ESP in UDP SPIs: cca608fa_i d74355dc_o vpn{1}: AES_CBC_256/HMAC_SHA2_256_128, 2688 bytes_i (32 pkts, 32s ago), 4992 bytes_o (32 pkts, 32s ago), rekeying in 43 minutes vpn{1}: 2.2.2.2/32 === 3.3.3.3/32
내 NAT 규칙은 다음과 같습니다 pf.conf
.
nat on enc0 from 1.1.1.0/24 to 2.2.2.2/32 -> 3.3.3.3
이 내 꺼야 ipsec0 interface status
:
ipsec0: flags=8011<UP,POINTOPOINT,MULTICAST> metric 0 mtu 1400 inet 3.3.3.3/32 --> 2.2.2.2/32 netmask 0xffffffff options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL> reqid: 0 groups: ipsec
3.3.3.3에서 2.2.2.2로 원활하게 갈 수 있습니다.
다음은 xn0(물리적 인터페이스)의 간단한 패킷 캡처입니다.
$ tcpdump -i xn0 -n -vvv host 2.2.2.2
1.1.1.10 > 2.2.2.2: ICMP echo request, id 15745, seq 818, length 64
그리고 enc0에는 트래픽이 표시되지 않습니다.
또 다른 시도는 다음을 통해 설정하는 것입니다 sysctl
.
net.inet.ipsec.filtertunnel=1
하지만 이 옵션이 정확히 무엇을 하는지는 잘 모르겠습니다.
나는 많은 사람들이 이 자연 현상을 작동시키려고 노력했지만 성공하지 못하는 것을 보았습니다.
답변1
며칠 동안 고생한 끝에 아래 단계에 따라 이 문제를 처리할 수 있었고 다른 사람들을 돕기 위해 여기에 해결책을 게시하겠습니다.
소스를 연결하려는 필수 SA의 고유 ID를 가져옵니다. 예를 들면 다음과 같습니다.
setkey -DP
그리고 SA 고유 ID를 찾으세요.
3.3.3.3[any] 2.2.2.2[any] any
out ipsec
esp/tunnel/REALIPLOCAL-REALIPREMOTE/unique:1
created: Jul 22 22:29:34 2018 lastused: Jul 22 22:29:34 2018
lifetime: 9223372036854775807(s) validtime: 0(s)
spid=2715 seq=0 pid=13358 scope=global
refcnt=1
이 경우: 1
새 정책 추가:
setkey -v -c
spdadd -4 1.1.1.0/24 2.2.2.2/32 any -P out ipsec esp/tunnel/REALLOCALIP-REALREMOTEIP/unique:1;
이는 터널 내에서 패킷을 라우팅하고 실제 설치된 SA와 일치하도록 만드는 데 충분해야 합니다.
이 UniqueID는 설치된 SA와 일치해야 합니다. StrongSwan에서 SA 설치 순서를 변경하는 경우 새 UniqueID를 수용하도록 이 정책을 변경해야 합니다.
nat 규칙은 enc0 인터페이스에 적용되어야 합니다.
인용하다:
https://github.com/opnsense/core/issues/440
행운을 빌어요.