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」ディレクティブを使用してコンテナ内のトラフィックを転送できるようになりました。素晴らしいです! :D
今直面している唯一の問題は、セキュリティ接続(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
たとえば、ポートを「公開」するなどの操作を実行します。ファイアウォールが外部トラフィックからこれらのポートをブロックしていないことを確認してください。それでは大丈夫でしょう。