0
1

WSL2 samba構築(ポートフォワーディング)

Last updated at Posted at 2024-06-06

目標

  1. wsl2でsamba構築
  2. ポートフォワーディングで外部からもアクセスできるようにする

割愛

  • wslインストール

構成図

kousei.png (285.9 kB)
  • wsl上でsambaを動かす都合上、外部からアクセスするためには、上図のようなポートフォワーディングが必要になります。

samba設定

インストール

sudo apt update
sudo apt install samba

sambaの設定ファイル

/etc/samba/smb.conf のの末尾に追記

[share]
path = /home/あなたのユーザー名/samba
read only = no
guest ok = yes
writable = yes
valid users = あなたのユーザー名
  • share: 共有フォルダの名前。クライアントからこの名前でアクセスされる
  • path = /home/あなたのユーザー名/samba: 共有するディレクトリのパス。WSL上のディレクトリ

image.png

こんな感じになる

パスワード設定

以下を実行すると、パスワードが設定できる

sudo smbpasswd -a あなたのユーザー名

shell scriptsを作成・実行

  • samba起動用シェルスクリプトを作成
#!/bin/bash

set -eax

sudo mkdir -p /run/samba/ncalrpc
sudo systemctl restart smbd
sudo systemctl status smbd --no-pager
sudo systemctl restart nmbd
sudo systemctl status nmbd --no-pager

  • ~/startの権限を実行可能に変更
sudo chmod 777 ~/start
  • 実行
./start

※ポリシー違反のエラーが出た場合にはこちらを参考にしてみてください。
【Qiita】PowerShellでこのシステムではスクリプトの実行が無効になっているため、ファイル hoge.ps1 を読み込むことができません。となったときの対応方法

  • 終了したい場合 は以下
sudo systemctl stop smbd
sudo systemctl stop nmbd

ポート確認

sudo netstat -tulnp | grep smbd
tcp        0      0 0.0.0.0:445             0.0.0.0:*               LISTEN      680/smbd
tcp        0      0 0.0.0.0:139             0.0.0.0:*               LISTEN      680/smbd
tcp6       0      0 :::445                  :::*                    LISTEN      680/smbd
tcp6       0      0 :::139                  :::*                    LISTEN      680/smbd

139と445番地でlistenしていることがわかる
(tcpとtcp6はそれぞれIPv4とIPv6のことです)

ポートフォワーディング

139と445を使用していることが分かったのでwslのポートをwindowsのポートへフォワーディングします。

以下のshellscriptsを作成

.\server_conf.ps1
# 現在のユーザーが管理者権限を持っていない場合に、スクリプトを管理者権限で再実行するための処理です。
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole("Administrators")) { Start-Process powershell.exe "-File `"$PSCommandPath`"" -Verb RunAs; exit }

# WSL 2 インスタンスの IP アドレスを取得します。
# bash.exe を使って、ip r コマンドを実行し、結果からIPアドレスを抽出します。
# IP アドレスが取得できない場合、スクリプトは終了します。
$ip = bash.exe -c "ip r |tail -n1|cut -d ' ' -f9"
if( ! $ip ){
  echo "The Script Exited, the ip address of WSL 2 cannot be found";
  exit;
}

# 通信を許可するポート番号のリストを指定します。
# このスクリプトでは、139,445の3つのポートを指定しています。
$ports=@(139,445);
$ports_a = $ports -join ",";

# 以前に作成されたファイアウォールの例外ルールを削除します。
iex "Remove-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' ";

# New-NetFireWallRule コマンドを使用して、指定したポート番号に対するインバウンドおよびアウトバウンドのファイアウォール例外ルールを作成します。
iex "New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Outbound -LocalPort $ports_a -Action Allow -Protocol TCP";
iex "New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Inbound -LocalPort $ports_a -Action Allow -Protocol TCP";

# netsh interface portproxy コマンドを使用して、ポートプロキシの設定を行います。
# 指定したポート番号に対して、IP アドレスを介しての接続を許可します。
for( $i = 0; $i -lt $ports.length; $i++ ){
  $port = $ports[$i];
  iex "netsh interface portproxy add v4tov4 listenport=$port listenaddress=* connectport=$port connectaddress=$ip";
}

# 作成されたポートプロキシの設定を表示します。
iex "netsh interface portproxy show v4tov4";

管理者権限 powershellで以下を実行

.\server_conf.ps1

ポートフォワーディングの確認

以下を実行

netsh interface portproxy show all
Address         Port        Address         Port
--------------- ----------  --------------- ----------
*               139         172.20.xxx.xxx   139
*               445         172.20.xxx.xxx   445
  • 0.0.0.0 (すべてのインターフェース) のポート 139 が、WSL の IP アドレス 172.20.xxx.xxx のポート 139 に転送される。
  • 0.0.0.0 (すべてのインターフェース) のポート 445 が、WSL の IP アドレス 172.20.xxx.xxx のポート 445 に転送される。
    ことが確認できる

ファイアウォール設定

以下を実行します

netsh advfirewall firewall add rule name="Allow Samba Port 139" protocol=TCP dir=in localport=139 action=allow
netsh advfirewall firewall add rule name="Allow Samba Port 445" protocol=TCP dir=in localport=445 action=allow

これにより、139と445番地上での受信が可能になります

接続

mac

image.png (10.2 MB) image.png (166.7 kB)

shareの部分は sambaの設定ファイルの[]で囲まれた文字列を使います (今回はshare)

image.png (198.2 kB)

できました

win

winマーク+R で\192.168.xxx.xxx\shareに接続
image.png (135.0 kB)

shareの部分は sambaの設定ファイルの[]で囲まれた文字列を使います (今回はshare)

image.png

できました

参考

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1