VPN 서버가 systemd-nspawn 시스템에 들어갑니다.

VPN 서버가 systemd-nspawn 시스템에 들어갑니다.

Arch Linux를 실행하는 Raspberry Pi의 systemd-nspawn 컨테이너에 VPN 서버(Openswan 버전을 선택했습니다)를 배포하려고 합니다. 이제 컨테이너에 로그인하고 ping을 수행한 후 컨테이너 내부에서 나갈 수 있습니다(컨테이너에서 인터넷을 가져올 수 있었습니다).

이것은 내 컨테이너의 systemd 구성 파일입니다. (.conf 재정의)

[Service]
ExecStart=
ExecStart=/usr/bin/systemd-nspawn \
    --quiet --keep-unit --boot --link-journal=try-guest \
   -D /usr/lib/machines/%I \
    --machine=%I

편집: openswan.nspawn 구성을 생성하고 재정의 파일에서 리팩터링했습니다.

따라서 파일은 다음과 같습니다.

[alarm@alarmpi ~]$ sudo cat /etc/systemd/nspawn/openswan.nspawn 
[Exec]
Capability=CAP_NET_ADMIN CAP_NET_BIND_SERVICE

[Network]
Private=yes
VirtualEthernet=yes
Port=udp:500:500
Port=udp:4500:4500
Port=udp:1701:1701
Port=tcp:500:500
Port=tcp:4500:4500
Port=tcp:80:80

내 컨테이너가 올바르게 시작되고 openswan과 관련된 다양한 서비스가 컨테이너 내부에서 올바르게 생성됩니다.

$ systemctl status [email protected][email protected] - Container openswan
   Loaded: loaded (/usr/lib/systemd/system/[email protected]; enabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/[email protected]
           └─override.conf
   Active: active (running) since lun 2016-07-04 11:36:55 CEST; 1 day 1h ago
     Docs: man:systemd-nspawn(1)
 Main PID: 15805 (systemd-nspawn)
   Status: "Container running."
   CGroup: /machine.slice/[email protected]
           ├─15805 /usr/bin/systemd-nspawn --quiet --keep-unit --boot --link-journal=try-guest --private-network --network-veth --capability=CAP_NET_ADMIN --mach
           ├─init.scope
           │ └─15810 /usr/lib/systemd/...
           └─system.slice
             ├─console-getty.service
             │ └─15853 /sbin/agetty --no...
             ├─dbus.service
             │ └─15838 /usr/bin/dbus-dae...
             ├─openswan.service
             │ ├─18417 /bin/sh /usr/lib/...
             │ ├─18418 logger -s -p daem...
             │ ├─18419 /bin/sh /usr/lib/...
             │ ├─18420 /bin/sh /usr/lib/...
             │ ├─18423 /usr/lib/openswan...
             │ ├─18425 _pluto_adns -- <i...
             │ └─18426 /usr/lib/openswan...
             ├─systemd-journald.service
             │ └─15824 /usr/lib/systemd/...
             ├─systemd-logind.service
             │ └─15837 /usr/lib/systemd/...
             ├─systemd-networkd.service
             │ └─15839 /usr/lib/systemd/...
             ├─systemd-resolved.service
             │ └─15848 /usr/lib/systemd/...
             └─xl2tpd.service
               └─15844 /usr/bin/xl2tpd -D

--network-veth를 사용하여 컨테이너를 설정했습니다.

이제 내 질문은 어떻게 실제로 이러한 포트(udp 500/4500/1701)를 docker에 "게시"하고 컨테이너 외부에서 사용할 수 있게 만드는가입니다.

좋다:

Road Warrior --> 클라우드 --> Arch pi --> systemd-nspawn 컨테이너 -->

iptables를 사용하여 트래픽을 전달하는 것이 쉽지 않다는 것을 알고 있지만 그것은 내가 원하는 것이 아닙니다.

브리지 설정이 필요한가요?

편집: 이제 "Port" 지시문을 사용하여 컨테이너 내에서 트래픽을 전달할 수 있습니다. 훌륭합니다! :디

지금 직면한 유일한 문제는 보안 연결(ISAKMP)을 처리할 때 다음 메시지와 함께 pluto가 충돌한다는 것입니다.

"L2TP-PSK-NAT"[1] 178.50.79.197 #1: /build/openswan/src/openswan-2.6.47/programs/pluto/keys.c:488 "L2TP-PSK-NAT"[1] 중단 178.50.79.197 #1: /build/openswan/src/openswan-2.6.47/programs/pluto/keys.c:488에서 중단합니다.

누군가에게 벨이 울리면 알려주세요. 시간이 나면 코드를 살펴보도록 하겠습니다.

계속될..

답변1

컨테이너의 포트를 호스트 인터페이스에 매핑할 수 있습니다. .nspawn 파일을 사용하여 컨테이너 속성을 정의하는 경우 네트워크 섹션을 사용할 수 있습니다.

[Network]
## use a networkd bridge for your containers, this name hints the ip range
Bridge=10.50.0.x
## this will map your tcp port 1701
Port=tcp:1701:1701

예를 들어 포트를 "게시"하는 등의 작업을 수행합니다. 방화벽이 외부 트래픽으로부터 이러한 포트를 차단하지 않는지 확인하세요. 그러면 괜찮을 것입니다.

관련 정보