coiai Logo
ホーム記事コラムPodcast会社情報
お問い合わせ

Ubuntu Samba ファイルサーバーを外からアクセスできるようにする

❓ これは何?

前回の記事 では内部ネットワークからファイルサーバーにアクセスする方法を記事にしました。

今回は外出先で外部のネットワークからファイルサーバーにアクセスするまでの手順をメモにします✍️


🪴 環境

サーバー側

  • Distributor ID: Ubuntu
  • Description: Ubuntu 24.04 LTS
  • Release: 24.04
  • Codename: noble
  • samba

クライアント側 MacBook Air

  • sonoma 14.5(23F79)
  • Apple M1
  • 16GB

🖐️ 手順

Samba の IPv6 設定

ネットワークの確認

ネットワークインターフェース名を確認します。
通常、eth0、ens33などの名前が使われます。

ip addr

/etc/netplan/01-network-manager-all.yaml の中身は標準では次のとおりです。

# Let NetworkMnager manage all devices on this system
network:
  version: 1
  renderer: NetworkManager

後述の理由で IPv4 ではなく、IPv6 での公開を目指します。
これであればルーター側の設定がDS-Liteでも問題なくできるはずです。

smb.conf の設定


SambaがIPv6でリスンするように設定します。
/etc/samba/smb.confの[global]セクションに次の行を追加します

interface = "lo" "enp3s0" "wlpws0"
   bind interfaces only = yes
   smb ports = 445

🔥 ファイヤウォールの設定

Sambaが利用する必要なポートをファイアウォールルールに追加します。

samba用ポートを全開放したい場合
sudo ufw allow samba

Sambaでは(137, 138, 139, 445)のポートを使用します。

外部のネットワークに接続する場合は 445 のみの解放の方がセキュリティリスクが低くなるかと思います。

sudo ufw reload
ファイアウォールの設定を再読み込みして、追加したルールを適用します。

sudo ufw allow from any to any port 445 proto tcp
sudo ufw reload

↑のように書くとTCP用の445のみの開放になります。

🐏 ufw とは?


udo ufw reload は、Ubuntuのファイアウォール(UFW: Uncomplicated Firewall)に関連するコマンドです。

ufw allow では

  • TCP/UDP 137 (NetBIOS Name Service)
  • TCP/UDP 138 (NetBIOS Datagram Service)
  • TCP 139 (NetBIOS Session Service)
  • \TCP 445 (Microsoft-DS Active Directory, Windows shares)

が解放されます。

ファイヤウォールの確認

ufw status で解放されているポートの確認ができます。

sudo ufw status

間違って開放した場合は次のコマンドで削除しておきましょう。

sudo ufw delete allow HOGE

動的DNSの利用

サーバー側のIPアドレスが変更されても、接続を確立するために、
https://noip.com を使ってDDNSを使用することにしました。

  • noip.com でのドメインの作成(sample.ddns.net など)
  • apt install ddclient と設定

が出来ていることを前提に次に進みます。
出来ているかは以下のコマンドで確認してみてください。

sudo systemctl status ddclient

出来ていない方は、次の記事を参照してください。

https://coiai.boy.jp/1661/

VPN の利用

Easy-RSA の設定が古い情報だとうまくいかないので、以下を参考にしました。https://community.openvpn.net/openvpn/wiki/EasyRSA3-OpenVPN-Howto

L2TP/IPsecやOpenVPNを設定し、VPN経由で内部ネットワークにアクセスします。
これにより、DS-Liteの制約を回避できます。

sudo apt intall openvpn easy-rsa -y

PIK ディレクトリの作成と初期化

make-cadir ~/openvpn-ca
cd ~/openvpn-ca
./easyrsa init-pki

make-cadir は easy-rsa の機能でOpneVPNの設定を含んだディレクトリを作成できるコマンドです。

CAのビルド
このコマンドを実行すると、
Common Name(eg: your user, host, or server name)[server]:
と聞かれるので、名前の入力をしましょう。

./easyrsa build-ca nopass

サーバーの証明書の作成

./easyrsa gen-req server nopass

サーバーの鍵の作成

./easyrsa sign-req server server

DHパラメータの作成

./easyrsa gen-dh

クライアント用の証明書と鍵を作成します。
クライアント名は任意の名前を指定します(例:client1)。

./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1

生成した証明書と鍵をOpenVPNのディレクトリにコピーします。

sudo cp ~/openvpn-ca/pki/ca.crt /etc/openvpn/
sudo cp ~/openvpn-ca/pki/issued/server.crt /etc/openvpn/
sudo cp ~/openvpn-ca/pki/private/server.key /etc/openvpn/
sudo cp ~/openvpn-ca/pki/dh.pem /etc/openvpn/
sudo cp ~/openvpn-ca/pki/issued/client1.crt /etc/openvpn/
sudo cp ~/openvpn-ca/pki/private/client1.key /etc/openvpn/


/etc/openvpn/server.confファイルを作成し、
以下の内容を追加します。

port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
keepalive 10 120
cipher AES-256-CBC
persist-key
persist-tun
status openvpn-status.log
verb 3

OpenVPNサービスを起動し、システム起動時に自動的に開始するように設定します。

sudo systemctl start openvpn@server
sudo systemctl enable openvpn@server

クライアント用の設定ファイル(.ovpn)を作成します。例えば、client1.ovpnファイルを以下の内容で作成します。

remote の hoge.ddns.net は動的IPの https://noip.com で作成したDNSです。

クライアント設定ファイルと共に、
ca.crt、client1.crt、client1.key
をUSBメモリなどを使ってクライアントデバイス(私の場合はMacBook)にコピーします。

client
dev tun
proto udp
remote hoge.ddns.net 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
remote-cert-tls server
cipher AES-256-CBC
verb 3


ファイアウォール設定でOpenVPNのポートを開放します。

sudo ufw allow 1194/udp

クライアント側でやること

私はMacBook Air を使っているので tunnelblick を使用しました。

brew install --cask tunnelblick

Tunnnelblick は先ほどクライアント側(MacBook)に移してきた hoge.ovpn ファイルをドラッグ&ドロップしたらOKです。

そうすると、個人用かユーザー全体かを聞かれると思うのですが、
今回の用途では個人用でOKです。


試したけどやらなかったこと

ルーター側の設定

私が使っているルーターは TP-Link Archer AX10 です。
このルーターでの設定を紹介します。

私と同様TP-Linkをお使いの場合は https://tplinkwifi.net/ にアクセスして管理画面に入りましょう。

まず、DS-Lite, MAP-E, V6 プラス の設定ではポートの設定ができないので、
これ以外を選択する必要があります。(ソース:https://www.tp-link.com/jp/support/faq/2799/)
そのためPPPoE方式にする必要があります。
それぞれの方式の違いについての記事はこちら

しかし、普段使いしているルーターと同じ場合 PPPoE に切り替えるとDS-Liteに比べ遅く感じてしまいます。
結局IPv4 での接続はやめることにしました。


🥦 まとめ

そしてブロッコリーも食べた方がいい

投稿日: 2024年7月22日
カテゴリ: Linux
タグ: mac os, NAS, Ubuntu, サーバー
coiai

coiai

この記事もおすすめ

「最新版を使えばいい」は本当に正しい?Dependabotを使って“pin + 自動更新”にする理由

「最新版を使えばいい」は本当に正しい?Dependabotを使って“pin + 自動更新”にする理由

依存ライブラリやGitHub Actions、Terraform Providerのバージョン管理をしていると、よく出てくるのが次の考え方です。 新しいバージョンが出たら、常に最新版へ上げればいいのでは? 一見すると合理的です。 実際、古いバージョンを長期間使い続けるより、継続的にアップデートした方が、脆弱性や非互換の問題を後回しにしにくくなります。 ただし、実際の開発運用では、 「バージョンを固定しない」ことと「常に新しい状態を保つ」ことは別です。 むしろ、 バージョンは固定し、Dependabotで自動的に更新PRを作る という運用の方が、安全性と更新頻度を両立しやすくなります。 今回は、実際の開発チームで出た「pinするべきか、しないべきか」という議論をベースに、Dependabotをどう使うべきか整理します。 きっかけは「そもそもpinしなくていいのでは?」という疑問 あるプロジェクトで、GitHub ActionsやTerraform Providerのバージョンを更新する話が出ました。 その中で、 理想的には何もpinしない方がいい。新しいバージョンが出たら常にアップグレードすればいいのでは? という意見が出ました。 この考え方自体は間違っていません。 目標としては、 依存関係を古いまま放置しない というのが正しいです。 ただし、その目標を実現する方法として「pinしない」を選ぶと、別の問題が出てきます。 そこで出てきたのが、 「pinしない」のではなく、「pin + automated bumps」にしよう という考え方です。 つまり、 バージョンは固定する。しかし、更新作業は自動化する。 これがDependabotを使う理由です。 GitHub Actionsでは、floating tagがリスクになる たとえばGitHub Actionsでは、次のような指定をすることがあります。 これは分かりやすく、一般的な書き方です。 ただし、v4 のようなタグは、厳密には「特定のコードそのもの」を表しているわけではありません。 タグが別のコミットを指すように変更されれば、同じ @v4 という記述でも、実際に実行されるコードが変わる可能性があります。 CI/CDで実行されるActionは、ビルド環境やデプロイ権限にアクセスすることがあります。 そのため、これはサプライチェーンセキュリティの観点でも重要です。 より厳密に管理するなら、特定のコミットSHAに固定します。 こうすると、同じ設定から実行されるコードが勝手に変わることはありません。 ただし問題があります。 固定しただけでは、そのバージョンは永遠に古くなっていきます。 そこでDependabotを使います。 新しいバージョンが出たら、 という流れにします。 つまり、 固定することで再現性を確保し、Dependabotで鮮度を維持する […]

デフォルトサムネイル

GMKtec EVO-X2にUbuntuを入れたら有線LANが認識されなかった話

オンプレミスAIサーバー(ローカルLLM + 社内文書RAG)の構築を始めました。機材はGMKtec EVO-X2、AMD Ryzen AI Max+ 395搭載のミニPCです。128GBのユニファイドメモリをGPUに大きく割り当てられるので、ローカルLLM用途では今いちばん面白いマシンだと思っています。 この記事は初日の作業ログです。結論から言うと「インストールUSBが起動しない」「有線LANが認識されない」という2つの罠を踏んだので、同じ構成を組む方のために記録しておきます。 OSはLinuxかWindowsか 最初に迷うのがここですが、サーバー用途ならUbuntu Server一択でした。 日常操作はすべてブラウザ(Open WebUI)経由なので、サーバーOSにGUIは不要です。管理画面が欲しければCockpitを入れれば、Webブラウザからメトリクス確認・サービス再起動・ターミナルまで使えます。「CUIのサーバー + Web管理画面」が現代の標準形だと思います。 BIOS設定 ― EVO-X2で一番大事なのはVRAM割り当て 電源ON直後にDel連打でBIOS(AMI)へ入ります。設定したのは3つです。 罠その1: インストールUSBが起動しない Ubuntu Server 24.04のISOをMacから dd でUSBメモリに書き込み、いざブート……しません。Boot Overrideに出てくる「UEFI OS」を選んでもWindowsが立ち上がってしまいます。 切り分けの過程が学びでした。 原因はおそらく、dd の書き込みが完全に終わる前に抜いてしまったことです。dd は進捗表示が止まってからもバッファの書き出しが続くので、完了統計が表示されるまで待たなければいけません。パーティションテーブルはディスク先頭に書かれるため、途中で切れていても一見正常に見えるのが厄介なところです。 教訓: インストールUSB作成はbalenaEtcherを使いましょう。 書き込み後に自動でベリファイ(照合)まで走るので、「書けたつもり」が原理的に起きません。Etcherで書き直したら一発で起動しました。 インストール時の選択 罠その2: 有線LANが認識されない インストール完了、ログイン成功。しかし ip a を見ると有線LANにIPがありません。それどころか、よく見ると有線のインターフェース自体が存在しません。 カーネルログを見て原因が確定しました。 EVO-X2の2.5GbEチップ(Realtek RTL8125D)が新しすぎて、Ubuntu 24.04の標準カーネル6.8のドライバが知らないチップだったのです。インストール中にネットに繋がらなかったのもこれが原因でした。ケーブルを何度挿し直しても無駄だったわけです。 教訓: 「繋がらない」時はケーブルを疑う前に dmesg を読みましょう。 カーネルログには大抵、答えがそのまま書いてあります。 解決: HWEカーネル 新しいチップに対応するには、新しいカーネルを入れれば解決します。Ubuntuには**HWE(Hardware […]

FSD v2.1 Feature-Sliced Design を導入する

FSD v2.1 Feature-Sliced Design を導入する

この記事は何? 公式のドキュメントやチュートリアル、exsample を読んで理解するのが一番いいですが、備忘録として残しておきます。特に後述の Skills, Steiger については開発する際にあった方が便利なので、それについても記事にします。 FSDとは? FSD (Feature-Sliced Design) はフロントエンドのアーキテクチャの一つです。 FSDとは責務で分けていくアーキテクチャと違い、ページやエンティティで分けていくアーキテクチャというとわかりやすいと思います。 コードの分離の仕方について話す前に、FSDで前提となる この3つについて理解する必要があります。 レイヤー より細かく分けていく方法がありますが、この記事では導入だけ触れたいので、3つのレイヤーのみ説明します。 です。この流れは上(app)に向かえば向かうほどアプリケーション固有、下(shared)に向かうほど汎用的になります。 原則として上位レイヤーは下位レイヤーを利用できるが、下位レイヤーから上位レイヤーへ依存できません。 始め方としては小さく初めて、必要になったらレイヤーを増やしてくようです。 スライス ブログアプリであればレイヤーの pages には といったページに分けられるため、このような構成になります。このblog-list, blog-detail, user がスライスです。これらはページやエンティティによって分けられます。 セグメント これらのmodel, ui といった部分がエンティティです。これらは責務にあたります。sharedに関しては直下にスライスではなくセグメントが入ります。 FSD 2.1 で重要なのは Pages First です。とにかくPagesから作って、細分化の必要ができたら、下位レイヤーに抽出します。 Steiger Steiger とはアーキテクチャリンターです。以下でインストールできます。 AIコーディングのために Claude Skills https://github.com/feature-sliced/skills?utm_source=chatgpt.com このリポジトリが公式に公開されています。 これで Skills を追加できるので、claude にFSDの設計知識を共有できます。

フロントエンドのアーキテクチャについて最初から考える

フロントエンドのアーキテクチャについて最初から考える

これは何? この記事は基本に立ち戻りアーキテクチャの選定を試みた際の備忘録です。Feature-Sliced Design(FSD)や Vertical Slice Architecture など、モダンなアーキテクチャがありますが、どのような判断をもとに選定するのかを考え直します。 アーキテクチャの地図 アーキテクチャを理解するために、以下のような学習のための地図を作りました。設計原則、アーキテクチャ、個別の設計パターンへと詳細になっていきます。 そもそも、、、 このコードは何を担当しているのかを考えるのが最初の問です。 商品一覧画面を作るときに といったタスクを書き出します。 これら全てを一つの巨大なコンポーネントとして作ることもできますが、管理が大変になるのは皆さんもお分かりだと思います。参考:https://blog.cleancoder.com/uncle-bob/2014/05/08/SingleReponsibilityPrinciple.html?utm_source=chatgpt.com ここからどこまでを同じモジュールとして管理するのか?という設計の問題が始まります。 Cohesion と Coupling CohesionとCouplingはそれぞれ、凝集度、結合度というようです。https://qiita.com/dsudo/items/ee3fee1f558c7f1b359f Cohesionは関係するコードがまとまっているか? Couplingは別のコードにどれだけ依存しているか? です。 例えば以下のようなコードがあります。 技術的な種類ごとに整理されていますが、商品一覧のコーディングをするのにそれぞれ別のディレクトリを行き来する必要があります。一方で、以下のように書いた場合はどうでしょうか? この書き方なら、商品に依存するコードがまとまっています。 この書き方が Feature-based Architecture, Vertical Slice Architecture に繋がっていきます。 コロケーションについて colocation Place code as close to where it’s relevant as possible 同じ種類のコードを集めることではなく、一緒に変更されるコードを近くに置くことです。 https://kentcdodds.com/blog/colocation?utm_source=chatgpt.com Layered Architecture について ここからアーキテクチャの話です。 Layered Architectureでは、技術的責務でアプリケーションを分離します。 これのメリットは責務がわかりやすいところです。 しかし、この方法では前述までとは変わり、機能を変更するときに、横断して変更する可能性があります。 つまり、技術的には分かれている一方で、機能は複数に分散するわけです。 […]

この記事を書いた会社

株式会社coiaiは、「想像できることを美しく実現」を掲げ、XR・Web・アプリ・システム開発およびDX支援を行う会社です。 創業2022年、東京都練馬区に本社を置き、要件のヒアリングからPoC(概念実証)、本番運用まで一貫して伴走します。 まずはお気軽にご相談ください。

商号株式会社 coiai創業2022年1月設立2025年1月23日資本金1,500,000円(設立時点)本社所在地東京都練馬区関町北 3-6-9代表者代表取締役 竹村 啓佑 / 代表取締役 服部 陽良

主なご相談内容

  • Webサイト・Webアプリの設計・開発
  • スマートフォンアプリ(iOS / Android)の開発
  • XR・AR・VRを活用した体験設計・開発
  • DX推進・業務システムの企画・開発
  • PoC(概念実証)から本番運用までの伴走支援
  • マーケティング・コンサルティング
会社概要・役員紹介を見る

詳しい会社情報は会社概要ページでご覧いただけます。

資料請求・無料相談

導入要件のヒアリングからPoC、本番運用まで伴走します。まずはお気軽にご相談ください。

フォームで問い合わせメールで相談

お問い合わせの前に 個人情報保護方針 をご確認ください。

株式会社coiai株式会社coiai

XR, Web, システム開発, DX — 想像できることを美しく実現

メールでお問い合わせ

サービス

on-premise AI

基幹システム Anchor

XR開発

会社情報

会社概要

ブログ

お問い合わせ

法務

プライバシーポリシー


所在地

〒177-0051 東京都練馬区関町北3-6-9

営業時間

平日 10:00-18:00

土日祝 休み

info@coiai.net

© 2023–2026 株式会社coiai. All rights reserved.