VPN Serverを立ち上げているEC2でAWSエンドポイントへの接続失敗

SoftEther VPN に関するご質問はこのフォーラムにお気軽にご投稿ください。
Post Reply
tanaka
Posts: 7
Joined: Fri Nov 27, 2020 2:53 am

VPN Serverを立ち上げているEC2でAWSエンドポイントへの接続失敗

Post by tanaka » Fri Nov 27, 2020 6:12 am

vpnserverを立ち上げているEC2インスタンスにてAWS CLIを使用すると一部のサービスで
AWSエンドポイントへの接続が失敗します。(Connection refused)
HTTPSへの接続で証明書がamazonのRoot証明書ではなくsoftetherの証明書が選択されることが原因と思われますが
対処の仕方がわかりません。
どなたかご教示頂けますと幸いです。

Softetherで証明書を固定するようなオプション、仕様があるのか、
ユーザアプリで使用する証明書を固定をしているのかがわかりません。
これをamazonの証明書で接続するようにしたいのですが可能でしょうか。
また、その場合既存のvpnserver側(VPNクライアントからの接続)へは影響がでないでしょうか。

下記にCurlの実行結果と使用環境などのテンプレート回答を貼付致します。

Curl結果の
* Server certificate:
* subject: C=US,OU=vpn497981003.softether.net,O=vpn497981003.softether.net,CN=vpn497981003.softether.net
の部分が問題だと考えております。

~]# cat /etc/pki/tls/certs/ca-bundle.crt|grep -i amazon
# Amazon Root CA 1
# Amazon Root CA 2
# Amazon Root CA 3
# Amazon Root CA 4

~]# curl --cacert /etc/pki/tls/certs/ca-bundle.crt -v https://email.ap-northeast-1.amazonaws.com/
* About to connect() to email.ap-northeast-1.amazonaws.com port 443 (#0)
* Trying 54.199.216.130...
* Connected to email.ap-northeast-1.amazonaws.com (54.199.216.130) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
* Server certificate:
* subject: C=US,OU=vpn497981003.softether.net,O=vpn497981003.softether.net,CN=vpn497981003.softether.net
* start date: Dec 07 11:52:49 2017 GMT
* expire date: Dec 31 11:52:49 2037 GMT
* common name: vpn497981003.softether.net
* issuer: C=US,OU=vpn497981003.softether.net,O=vpn497981003.softether.net,CN=vpn497981003.softether.net
* NSS error -8101 (SEC_ERROR_INADEQUATE_CERT_TYPE)
* Certificate type not approved for application.
* Closing connection 0
curl: (60) Certificate type not approved for application.
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
of Certificate Authority (CA) public keys (CA certs). If the default
bundle file isn't adequate, you can specify an alternate file
using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
the bundle, the certificate verification probably failed due to a
problem with the certificate (it might be expired, or the name might
not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
the -k (or --insecure) option.

以下にテンプレートを記載致します。

1. オペレーティングシステムの名前および CPU ビット
CentOS 7..7 x64

2. "ifconfig -a" (UNIX) または "ipconfig /all" (Windows) の結果
$ ifconfig -a
eth0: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST> mtu 1500
inet 172.31.30.31 netmask 255.255.240.0 broadcast 172.31.31.255
inet6 fe80::c1b:acff:fe36:970e prefixlen 64 scopeid 0x20<link>
ether 0e:1b:ac:36:97:0e txqueuelen 1000 (Ethernet)
RX packets 805629 bytes 117106089 (111.6 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 855038 bytes 83185447 (79.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 348535 bytes 202600246 (193.2 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 348535 bytes 202600246 (193.2 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 54.199.183.104 netmask 255.0.0.0
loop txqueuelen 1000 (Local Loopback)

tap_vpn: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.200.0.2 netmask 255.255.0.0 broadcast 10.200.255.255
inet6 fe80::2ac:a2ff:fe79:fafd prefixlen 64 scopeid 0x20<link>
ether 00:ac:a2:79:fa:fd txqueuelen 1000 (Ethernet)
RX packets 58880 bytes 4077702 (3.8 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 48636 bytes 4026844 (3.8 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

3. "uname -a" (UNIX) または "systeminfo" (Windows) の結果
$ uname -a
Linux ip-172-31-30-31.ap-northeast-1.compute.internal 3.10.0-1062.9.1.el7.x86_64 #1 SMP Fri Dec 6 15:49:49 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

4. SoftEther VPN のビルド番号
Ver 4.24, Build 9651

5. どの SoftEther VPN のコンポーネントを使用していますか?
すみません。わかりません。

6. VPN サーバーとインターネットとの間に NAT やファイアウォールデバイスはありますか?
(もし NAT またはファイアウォールがある場合、VPN サーバーの TCP リスナポートに対して TCP ポートを開く必要があります。)
AWS EC2なのでSGがありますが今回はping、curlが届いているので問題ないと思われます。

7. SecureNAT 機能を使用していますか?
すみません。わかりません

8. 現在の vpn_server.config または vpn_bridge.config ファイルの内容を投稿に添付してください。
vpn_server.config を一部マスキングして添付いたします。
You do not have the required permissions to view the files attached to this post.

cedar
Site Admin
Posts: 2066
Joined: Sat Mar 09, 2013 5:37 am

Re: VPN Serverを立ち上げているEC2でAWSエンドポイントへの接続失敗

Post by cedar » Fri Nov 27, 2020 10:42 am

ServerCertSet コマンドでサーバー証明書を指定することができます。

https://ja.softether.org/4-docs/1-manua ... D.E5.AE.9A

tanaka
Posts: 7
Joined: Fri Nov 27, 2020 2:53 am

Re: VPN Serverを立ち上げているEC2でAWSエンドポイントへの接続失敗

Post by tanaka » Mon Nov 30, 2020 7:57 am

ご回答ありがとうございます。
返信が遅くなり申し訳ありません。

ご回答頂いた部分を改めて確認致しましたがご提示頂いた設定はしていないように見えます。
また、ご回答頂いた証明書については
VPNクライアントーVPNサーバ間で使用する証明書ではないでしょうか。
VPNサーバーAWSエンドポイント間の証明書の指定ではないように思いますが如何でしょうか。

よろしくお願いいたします。

cedar
Site Admin
Posts: 2066
Joined: Sat Mar 09, 2013 5:37 am

Re: VPN Serverを立ち上げているEC2でAWSエンドポイントへの接続失敗

Post by cedar » Mon Nov 30, 2020 8:16 am

状況について誤解しておりました。

AWS のサービスにアクセスした際に、何らかの理由で、正しい接続先ではなく、VPN サーバーに接続されてしまっているように見えます。
具体的な発生機序はよく分かりませんが、仮想 HUB の DHCP サービスでデフォルトゲートウェイを配布している状態で、tap モードのローカルブリッジを行っていることで、自分自身をデフォルトゲートウェイとするような設定になってしまっている可能性があります。
tap デバイスにデフォルトゲートウェイが設定されている場合は、それを削除してみてください。

tanaka
Posts: 7
Joined: Fri Nov 27, 2020 2:53 am

Re: VPN Serverを立ち上げているEC2でAWSエンドポイントへの接続失敗

Post by tanaka » Mon Nov 30, 2020 8:26 am

迅速かつ詳細なご回答大変助かります。
ありがとうございます。

確認に時間がかかるかと思いますので
取り急ぎ承知した旨お申し上げ致します。
よろしくお願いいたします。

tanaka
Posts: 7
Joined: Fri Nov 27, 2020 2:53 am

Re: VPN Serverを立ち上げているEC2でAWSエンドポイントへの接続失敗

Post by tanaka » Thu Dec 03, 2020 2:03 am

お世話になっております。
確認したところやはりデフォルトゲートウェイに自身が指定されておりました。

centos@ip-172-31-30-31:~$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default ip-172-31-16-1. 0.0.0.0 UG 0 0 0 eth0
default 0.0.0.0 0.0.0.0 U 30000 0 0 tap_vpn
10.200.0.0 0.0.0.0 255.255.0.0 U 0 0 0 tap_vpn
link-local 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
172.31.16.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0
224.0.0.0 - 255.255.255.0 ! 0 - 0 -
224.0.0.0 0.0.0.0 240.0.0.0 U 0 0 0 tap_vpn
255.255.255.255 - 255.255.255.255 !H 0 - 0 -


しかしMetricが30000なので基本的には優先度が低く使われるのはeth0の認識でした。
そこでdefault 0.0.0.0 0.0.0.0 U 30000 0 0 tap_vpnを削除したところ
teratermが切断され何も接続できなくなったことから
ご記載頂いているブリッジ接続を使用していると推測しています。
この場合、VPNクライアント、VPNサーバともに外への接続を保つには
ブリッジを解除したのちに
default 0.0.0.0 0.0.0.0 U 30000 0 0 tap_vpn
を削除すればよろしいでしょうか。

聞いてばかりで申し訳ございませんが
何卒ご教示頂けますと幸いです。
よろしくお願いいたします。

cedar
Site Admin
Posts: 2066
Joined: Sat Mar 09, 2013 5:37 am

Re: VPN Serverを立ち上げているEC2でAWSエンドポイントへの接続失敗

Post by cedar » Thu Dec 03, 2020 2:55 am

default 0.0.0.0 0.0.0.0 U 30000 0 0 tap_vpn の行ではゲートウェイに指定されているルーターがないため有効なルーティングとはなっておらず、インターネットとの通信に直接は使用されていないと思います。
こちらの質問でも VPN 接続時に追加される default 0.0.0.0 エントリは削除するようにアドバイスされているようです。

https://askubuntu.com/questions/1003295 ... 24#1003324

ローカルブリッジを削除すると、tap デバイス自体も消滅するため、ローカルブリッジを削除した状態で削除することは難しいと思います。
しかし、すいませんが、どうすればいいのかについては分かりません。

tanaka
Posts: 7
Joined: Fri Nov 27, 2020 2:53 am

Re: VPN Serverを立ち上げているEC2でAWSエンドポイントへの接続失敗

Post by tanaka » Thu Dec 03, 2020 5:38 am

いつもお世話になっております。
迅速なご回答ありがとうございます。
引き続き調査してみたいと思います。
よろしくお願いいたします。

tanaka
Posts: 7
Joined: Fri Nov 27, 2020 2:53 am

Re: VPN Serverを立ち上げているEC2でAWSエンドポイントへの接続失敗

Post by tanaka » Tue Dec 15, 2020 5:19 am

進展がありましたが引き続きハマっており
もし何かしらわかることやヒントになることがありましたらご教示頂けますと幸いです。

現状はVPN接続はセッションが確立されIPも取得できますが、
Client→Server通信 NG
Server→Client通信 NG
となっております。

対応としては以下を行いました。
以下のセクションを削除することでtap_vpnのルーティング行は全て消えました。
declare LocalBridgeList
{
bool DoNotDisableOffloading false
declare LocalBridge0
{
string DeviceName vpn
string HubName VPN
bool LimitBroadcast false
bool MonitorMode false
bool NoPromiscuousMode false
string TapMacAddress 00-AC-A2-79-FA-FD
bool TapMode true
}
}

また、その他の設定として以下のDhcpDnsServerAddress 0.0.0.0を10.200.0.1に変更しました。
declare VirtualDhcpServer
{
string DhcpDnsServerAddress 0.0.0.0
string DhcpDnsServerAddress2 0.0.0.0
string DhcpDomainName $
bool DhcpEnabled true
uint DhcpExpireTimeSpan 7200
string DhcpGatewayAddress 10.200.0.1
string DhcpLeaseIPEnd 10.200.255.254
string DhcpLeaseIPStart 10.200.0.3
string DhcpPushRoutes $
string DhcpSubnetMask 255.255.0.0
}

何卒よろしくお願いいたします。
以上です。

cedar
Site Admin
Posts: 2066
Joined: Sat Mar 09, 2013 5:37 am

Re: VPN Serverを立ち上げているEC2でAWSエンドポイントへの接続失敗

Post by cedar » Tue Dec 15, 2020 12:30 pm

ローカルブリッジがないと、VPN Server は仮想 HUB と通信できません。

ユーザーモード仮想 NAT 経由で通信を行わせることも可能ですが、クライアント側で VPN 通信先に使用している IP アドレスへの経路を仮想 NAT にしてしまうと、VPN 接続が切れてしまうので、その場合は、別の IP アドレスを VPN Server に持たせる必要があります。
また、この方法は仮想 NAT の動作モードが、カーネルモードや RawIPモードでは使用できません。

また、NAT(IPマスカレード)なので、当然 WAN 側である Server → Client の通信は行なえません。

tanaka
Posts: 7
Joined: Fri Nov 27, 2020 2:53 am

Re: VPN Serverを立ち上げているEC2でAWSエンドポイントへの接続失敗

Post by tanaka » Tue Dec 22, 2020 12:37 am

気づくのが遅れてしまい大変申し訳ございません。
ご回答頂き誠にありがとうございます。
頂きました回答を基に引き続き調査したいと思います。
よろしくお願いいたします。

Post Reply