数年前からやってて今更やけどメモ。書きかけてたの忘れてた。

パブリックサブネットにec2-linuxホスト立てて、プライベートサブネットにec2-windowsホスト作ったとき、linuxを踏み台にしてwindowsホストにrdp接続できるようになる。

VPCとかサブネットとかセキュリティグループとか、チョー苦手。

VPCの中のサブネットをパブリックとプライベートに分ける

サブネットのうち、パブリック(sub1)のほうにインターネットゲートウェイつける。

プライベート(sub2)にNATゲートウェイつけといて、インターネットへ出れるようにする。

aws

作る方針はこう。

  1. パブリックのサブネットはインターネットからの入り口やから、グローバルIPアドレスを特定のIPにだけssh許す
  2. プライベートのサブネットは外部から入らせず、パブリックのサブネットからのみ接続を許す
  3. 社内ネットとVPN接続したりdirect connect(あんまりよう知らん)するなら、dnsとかルーティングを社内に向けるからNATゲートウェイいらん
  4. 社内ネットがあるなら、そこも接続を許して社内ネットは許可されたら踏み台経由せんでもrdpできるようにする

構成を考えてメモするとイメージ湧きやすい。今はリソースマップで見せてくれる。

aws

マウスオーバしたら、ここでは青色でルートテーブルとゲートウェイをハイライトしてくれる。

接続を許すには、ec2のセキュリティグループでsshとかrdpのポートを許可しとく。

許可するIPをグループ指定できるのが、VPCのカテゴリにあるManaged prefix listsってとこ。最近は日本語に変換して表示されてるはず。

aws

google cloudでもIPの塊にタグつけてグループをセキュリティ設定に指定できるんやけど、なんとazureにはグループが定義できへんかった!(2025年7月現在)

エントリってところに入れとくと、具体的な定義ができる。

aws

インターネットゲートウェイとNATゲートウェイはアタッチしとく

インターネットゲートウェイはVPCにアタッチしとく。

aws

NATゲートウェイはElasticIPつける。

aws

dhcpオプションセットを作る

これがあると、ec2に対して一律でdns設定を配れる。クラスタ入れてるサーバだけ違うDNSにしたい、とかやったらOSのDNS設定したらええ。

aws

DNSで思い出したけど、サブネットの4オクテット目が2はDNSやったはず。

vpcの中のサブネットってIPアドレス予約があるから、ec2が使えへんIPアドレスがある。ec2のIPアドレスは4オクテット目を10から使うことにしてる。

IPアドレス 備考
10.0.0.0 ネットワークアドレス
10.0.0.1 AWS VPCルーター用
10.0.0.2 AWS DNSサーバー用
10.0.0.3 AWSが将来利用のため予約
10.0.0.255 ブロードキャストアドレス

「将来利用のため予約」って何やろな。

セキュリティグループを作る

sshの許可

できるだけ規則的に名前つけとくのと、説明を入れといたほうが後で楽になるはず。

aws

入ってくる通信を許可するインバウンドルールにsshをタイプに選ぶと、自動的にtcpの22って入ってくれる。

aws

あとサブネット間の通信は必要なポートに絞るほうがええけど、検証環境やったら「すべてのトラフィック」を許可しとく。

rdpとかoracleとかpostgresqlとか書いたらええけど、あんまりいっぱい許可するとパケットいっぱい通って重くなるから重くなるしやらん。

セキュリティグループはいくつもルールが書ける。もちろん 限界 はある。

1つのルールにいくつものタイプを書くこともあるし、sshとかrdpとかタイプごとにルールを作ってもええ。

出ていく通信を許可するアウトバウンドはほぼ全許可することが多い。

最初の頃、アウトバウンドをvpc内のみ許可ってやってたら、「oracleのdbリンクできんぞゴラァ」って怒られたことあった。

「なんやねん、社内ネット構成見せてくれてへんのにどこ許可したらええんか言えやゴラァ」って思いながら全許可した。

rdpの許可

さっき作ったssh接続のセキュリティグループをソースに指定して、rdp接続を許可しとく。

aws

sshトンネリング接続

プライベートサブネットにec2-windowsホスト作っておいて、パブリックサブネットec2-linuxホスト立てとく。

トンネリング用やからt2.microとか弱目のマシンタイプで作ったらええ。

作ったec2-linuxホストのネットワークカードにセキュリティグループ適用しとく。

teratermマクロ書くとき、ec2作ったときの鍵ファイルと、ssh接続先指定する。

ec2-linuxホストはelasticIPを割り当てたときにDNS名が割り当てられるようにしとけば、その名前でssh接続できるし、winscp使ってファイル転送もできる。

teraterm接続設定に、sshポート転送の設定を入れておいて.iniファイルに保存しといてteratermマクロで使ったらええ。

aws

企業の中やったらプロキシ使ってることもあるはず。

teraterm設定にこれも設定あるから、ホスト名とかポート番号、あるんやったらプロキシ使う時の認証情報を入力しといたらURLの箇所作ってくれる。

aws

省くけどwinscpにもプロキシ設定あるで。

ついでに踏み台のssh接続画面の色変えて、teratermの.iniファイルに反映しといたら、どのVPC環境つないでるかって区別しやすくなる。

検証環境とか本番環境とか、混同せんようにこれ大事。

ローカルのポート番号は自分の都合でつければええ。

地道に台帳管理してもええけど、自分は1万番台とか2万番台とか、万の位を変えて割り当ててVPC単位の接続を維持してるかな。

1
2
3
4
13389(ap1), 13390(ap2), 13391(db1), 13392(db2) ⭐️vpc1用
23389(ap1), 23390(ap2), 23391(db1), 23392(db2) ⭐️vpc2用
:(中略)
63389(ap1), 63390(ap2), 63391(db1), 63392(db2) ⭐️vpc6用

そのポート番号を使って、rdp接続も保存できるから作っといて接続してみる。

接続先はlocalhostで、ssh転送設定で入力したポート番号を使う。

aws

資格情報入力したらつながる。

aws

awsでec2ホスト作ると、指定した名前とは関係ないホスト名つけてくれるのな。

ここまで来ると、自分のローカルPCにあるデスクトップのファイルをrdp越しにファイルコピーできるから構築作業できるようになる。

ssh接続の帯域幅が細いと、rdpとかwinscpがゆっくり動くのな。

google cloudやったら ここ でsshトンネリングやった。

azureやったら ここ でssh接続やらdockerコンテナへの接続をやった。