IT技術
WSL2上で何かサーバーを起動すると、自動でWindows側からはlocalhostからアクセスできるようにポートフォワーディングが設定されます。しかし、設定対象がlocalhostなのでWindowsの外部からアクセスできません。
そこで、ネット上はいくつかの方法が紹介されています。
- Linux(WSL2)上のポートに手動でポートフォワーディングを設定
- ポートを定期的に監視し自動でWindows側でポートフォワーディングを設定するツールを使用する
- Linux(WSL2)をWindowsが繋がっているLANに直接接続(ブリッジ)する
これらの方法は手間がかかったり、デメリットがあったりと一長一短です。
そこで、今回紹介する方法はWSLHostPatcherというツールです。
WSL2のlocalhost宛の通信を自動でポートフォワーディングするデフォルトの機能は、Windows上で動いているwslhost.exeプロセスで実現されています。本ツールはこのプロセスの動作をいじって(フックして)、localhost以外のIP宛の通信も自動でポートフォワーディングします。
使い方はすごく簡単です。https://github.com/CzBiX/WSLHostPatcher/releasesからWSLHostPatcher.zipをダウンロードし、中に入っているWSLHostPatcher.exeを実行するだけです。
実行後、WSL2上で起動したサーバは自動でポートフォワーディング設定され、Windows外部からもアクセスできるようになります。なお初めて使う場合は、Windows側でアラートが出るので許可する必要があります。
※ 実行前から起動しているサーバは自動で設定されません。サーバを再起動してください。
なお、このツールはWSL2を停止すると機能が無効になります。そのため、WSL2を再起動したりする場合は再度実行してあげてください。
また、もちろんですがWindows外からアクセスされるようになるため、セキュリティにはご注意ください。
Firefoxをバージョン107にアップデートすると、Bookmarkや履歴などを表示するサイドバーの表示が崩れてしまいました。具体的にはサイドバーを開くと、以下のように表示領域全体に表示されなくなりました。
本事象ですが、どうやら昔からFirefoxをアップデート使っていた場合に発生する可能性があるらしく、昔の設定がFirefoxのプロファイルに残っているのが原因のようです。
設定はFirefoxのプロファイルが保存されているディレクトリにあるxulstore.jsonというファイルに保存されています。Firefoxを一旦閉じてこのファイルを削除し、再度Firefoxを起動すれば無事正常な表示に戻りました。
※ ファイルを削除するとFirefoxの見た目が一旦リセットされてしまいますので、ご注意ください
参考
~/.bash_profile に以下を記述しましょう。ターミナル(bash)起動時に自動起動します。
SSHAGENT=/usr/bin/ssh-agent
SSHAGENTARGS="-s"
if [ -z "$SSH_AUTH_SOCK" -a -x "$SSHAGENT" ]; then
eval `$SSHAGENT $SSHAGENTARGS`
trap "kill $SSH_AGENT_PID" 0
fi
Firefoxにはコンテナーという機能があり、Firefoxの中を論理的に分けることができます。
これにより、タブ毎にCookieの扱いを独立させることができるため、一つのFirefoxで仕事用、プライベート用といった複数のGoogleアカウントにログインしたりすることができます。また、サイトを跨ったユーザのトラッキングを防止する効果もありセキュリティ向上も見込めます。
コンテナータブは以下のように、Firefoxの設定で自由に追加・修正できるのですが、このコンテナ数が増えてくると順番を入れ替えたくなってきました。
Firefox Multi-Account Containers という拡張機能を使えば、この拡張機能内では自由にコンテナの順番が変えられるので重宝していました。
順番の変更はあくまで拡張機能内だけ有効で、上のFirefoxの設定から見えるコンテナータブの順番まで変更されず、タブ追加ボタン「+」を押すとバラバラの順番でコンテナ一覧が表示され目的のコンテナを探すのに一苦労してました。
そこで、コンテナの順番を手動でカスタマイズする方法を紹介します。前提とする環境はWindows 10 + Firefox 101.0.1 です。
本手順は最悪Firefoxの設定を壊す可能がありますので、バックアップを取るなど、自己責任でお願いします。
まずは、Firefoxを必ず終了し、Firefoxのプロファイルのフォルダを開いてください。プロファイルのフォルダは、デフォルトでは、C:\Users\ユーザ名\AppData\Roaming\Mozilla\Firefox\Profiles\ランダム文字列.default といったパスにあると思います。
このフォルダの下にcontainers.jsonというファイルがあります。これが設定ファイルなので、適当にバックアップをとっておいてください。
このファイルを開くと以下のように、JSONフォーマットでコンテナタブの設定が書かれています。
{"version":4,"lastUserContextId":3,"identities":[{"userContextId":1,"public":true,"icon":"chill","color":"blue","telemetryId":1,"name":"サーフィン" ・・以下略・・
このままだと見にくいので、整形すると以下のようになります。赤、青、緑の色をつけた部分が一つのコンテナタブの設定になっており、この順番が表示順となっています。
ちなみに私はjqコマンドで整形しましたが、面倒なら、JSONを整形できるWebサービスを使って整形するのが簡単です。
{
"version":4,
"lastUserContextId":3,
"identities":[
{
"userContextId":1,
"public":true,
"icon":"chill",
"color":"blue",
"telemetryId":1,
"name":"サーフィン"
},
{
"userContextId":2,
"public":true,
"icon":"circle",
"color":"purple",
"name":"仕事"
},
{
"userContextId":3,
"public":true,
"icon":"circle",
"color":"purple",
"name":"Amazon"
}
]
}
ここまで理解すれば後は簡単です。各コンテナのタブの設定をコピペして順番を入れ替えましょう。例えば、仕事とAmazonを入れ替えると以下の通りです。JSONなので配列の途中はカンマ(,)を入れ、最後はカンマ(,)を削除することに注意してください。また、userContetId等の値を変更するのはNGです。
{
"version":4,
"lastUserContextId":3,
"identities":[
{
"userContextId":1,
"public":true,
"icon":"chill",
"color":"blue",
"telemetryId":1,
"name":"サーフィン"
},
{
"userContextId":3,
"public":true,
"icon":"circle",
"color":"purple",
"name":"Amazon"
},
{
"userContextId":2,
"public":true,
"icon":"circle",
"color":"purple",
"name":"仕事"
}
]
}
後は、この設定を元のcontainer.jsonに上書きすれば設定は完了です。ちなみに上書きする時に元の未整形のJSONに戻す必要はありません。
Firefoxは、アドレス欄に「about:config」と入力すると、様々な設定を行うことができます。ここでは、私がよく使用する便利な最低限の設定をメモ代わりに残しておきます。Firefoxのバージョンは101.0.1 (Windows版) を使用しました。
JavaScriptによるポップアップウインドウを新しいタブで開く
Firefoxのタブグループの設定で以下にチェックを入れても、
サイトによっては、強制的に新しいウィンドウが開いてしまいます。これをタブで開く設定に変更します。
browser.link.open_newwindow.restriction → 0 に設定する(デフォルト=2)
最後のタブを閉じてもウィンドウを閉じない
デフォルトでは、最後のタブを閉じるとウィンドウが閉じてしまい、またFirefoxを起動する必要があります。ただ、ブラウザって一旦開くと閉じることってなかなかないので、ウィンドウを自動で閉じないようにします。
browser.tabs.closeWindowWithLastTab → false に設定する
検索ボックスでの検索時に結果を新しいタブで開く
あるサイトを見ていて、わからない事が出てくると検索しますが、デフォルトだと今見てるタブが検索結果画面に変わってしまいます。これを新しいタブで検索結果を開くように変更します。
browser.search.openintab → true
SSDの寿命を伸ばす
FirefoxeでYouTubeなどを見てると、ディスクに頻繁な書き込みが発生するそうです。なので、ディスクキャッシュサイズを128KBに変更します。
browser.cache.disk.max_entry_size → 128
その他
これは、about:configの設定ではないのですが、リンクをホイールクリック(ミドルクリック)を使って新しいタブで開いた場合、すぐにそのタブをアクティブにしたい(フォーカスしたい)場合は、タブグループの以下の設定にチェックを入れます。
インターネットの疎通確認をする際、IPv4なら以下のようなわかりやすいIPに対してpingを実行してみることがあります。
- 1.1.1.1 や 1.0.0.1 ← Cloudflare提供のDNSキャッシュサーバのIP
- 8.8.8.8 や 8.8.8.4 ← Google提供のDNSキャッシュサーバのIP
最も覚えやすいCloudflareのDNSキャッシュサーバ1.1.1.1のIPv6版はどうかなと調べてみましたが、
- 2606:4700:4700::1111 (リンク先に飛ぶにはIPv6環境が必要です。なんとIP直打ちでもサーバ証明書の警告がでません!)
と、難しくはないですがさっと思い出せるIPではありませんでした。GoogleのDNSキャッシュサーバも
- 2001:4860:4860::8888
と、同様にさっと思い出せる自信がありません。
ということで、もっと覚えやすいシンプルなIPがないか探してみました。ありました!
- 2600:: (リンク先に飛ぶにはIPv6環境が必要です。IP直打ちのためサーバ証明書の警告がでます。公式のURLはこちらです。)
です。このIPの持ち主はT-Mobileで、httpも受け付けてくれるので、curlで以下のように応答も受け取れます。
$ curl [2600::]
<html>
<head><title>302 Found</title></head>
<body>
<center><h1>302 Found</h1></center>
<hr><center>nginx/1.16.1</center>
</body>
</html>
ちなみに、上記の通り、httpでIPにアクセスすると他のページにリダイレクトされるので、実際のコンテンツまで取得したい場合は、以下のようにアクセスしましょう。
※ httpsにリダイレクトされるのですが、サーバ証明書がホスト名と一致せずに警告が出るので、-kをつけて警告を無視しています。
$ curl -L -k [2600::]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
~ 略 ~
家に古いバッファローのルータWHR-G301Nが転がっていたので、OpenWrtを入れてみましたので、その時の手順をここにメモっておきます。
環境
作業に使用した環境は以下の通りです。
- 作業PC
- Windows 10
- Windowsのファイアウォール機能は無効化 ★無効化しておかないとタイミング有無に関係なくファームウェア転送に失敗しました。私はこれでハマったのでご注意ください。
- Windows 10
- L2スイッチ
- ルーターとWindows PCを直接つなぐと、ルータ電源投入時にリンクアップに時間がかかってしまい、ファームウェア転送のタイミングがシビアになるらしいので、L2スイッチを間に挟みました。
- OpenWrt
- バージョン 17.01.2 (こちらからwhr-g301n-squashfs-tftp.binをダウンロード)
- 2022年5月現在、OpenWrtはもっと新しいバージョンがリリースされていますが、本ルータはフラッシュが4MiBしかなく、インストールできません。また、19.xxのバージョンも入れてみましたが、ルータの設定を変更しても保存されない事象が発生してしまったため、最終的に17.01.2に落ち着きました。
既存ファームウェアのバックアップ
元のファームウェアに戻したい時のことを考えて、ファームウェアをバックアップしました。手順は、DD-WRT OpenWrt 適材適所で両方使いたい人向け @ ウィキ の記述を参考にしました。
ずっと家に放置していたルータで、どんな設定かもわからなかったので、まずはルータを初期化しました。リセット方法はバッファローの公式YouTube動画を参考にしました。底面にリセットスイッチがあるのですが、縦置き用の台を本体に取り付けてると見えないので外しましょう。私は力ずくで引っ張ると外れましたが、場合によっては爪が折れる可能性もあるので、ご注意ください。
後は動画の通り、電源が入ってる状態で底面のリセットボタンをDIAGランプが点滅するまで長押しました。その後DIAGランプは点灯→消灯すると完了です。
次に、ルーターとPCを繋ぎます。PCには、ルータのデフォルトのネットワーク設定によって、192.168.11.XX (私の場合は192.168.11.2)が付与されました。コマンドプロンプトを管理者として実行し、ipconfigを実行した結果の例です。
※ この時点では、管理者として実行する必要はありませんが、後ほどのarpテーブルの操作で管理者権限が必要なので、忘れないようにこの時点で管理者として実行しました。
C:\> ipconfig
~略~
イーサネット アダプター ethernet:
接続固有の DNS サフィックス . . . . .:
IPv4 アドレス . . . . . . . . . . . .: 192.168.11.2
サブネット マスク . . . . . . . . . .: 255.255.255.0
デフォルト ゲートウェイ . . . . . . .: 192.168.11.1
私の環境では、アダプター名が "ethernet" になっていますが、環境によっては、"イーサネット 1"といった表示になっていると思います。このアダプター名は後で使うので、記憶しておきましょう。
http://192.168.11.1にブラウザからアクセスできることを確認します。IDはroot、パスワードは空欄でログインできます。
では、次にルーターのデバッグモードに入ります。ブラウザから、http://192.168.11.1/cgi-bin/cgi?req=frm&frm=py-db/55debug.html にアクセスします。IDはbufpy、パスワードはotdpopyです。
※ ルーターを初期化していない場合は、192.168.11.1はルーターのIPに読み替えてください。
※ ルーターにパスワードを設定している場合、デバッグモートのパスワードは、otdpopy+管理者パスワードになります。
以下のような画面が表示されるので、telnetdをクリック後、"start"ボタンを押します。
startボタンを押すとブラウザの画面は、通常のルーターの管理画面に戻ります。
Windowsのコマンドプロンプトからtelnetで192.168.11.1に接続します。
※ telnetコマンドがインストールされていない場合は、コントロールパネルのプログラムと機能よりインストールしておきましょう。(詳細割愛)
C:\> telnet 192.168.11.1
BusyBox v1.00 (2013.07.16-01:07+0000) Built-in shell (msh)
Enter 'help' for a list of built-in commands.
#
パーティションを確認します。
# cat /proc/mtd
dev: size erasesize name
mtd0: 0003e000 00001000 "uboot"
mtd1: 00002000 00001000 "uboot_environ"
mtd2: 000e0000 00010000 "linux"
mtd3: 002c0000 00010000 "rootfs"
mtd4: 00010000 00010000 "user_property"
mtd5: 00010000 00010000 "ART"
mtd6: 003a0000 00010000 "firmware"
各パーティションをddコマンドを使ってダンプします。なお、ルータ内はストレージの空きが少ないので、一気にダンプするのではなく、各パーティションをダンプ→PCにダウンロード→ダンプ削除 の手順でバックアップしていきます。
まずは、書き込み可能なディレクトリに移動します。
# cd /tmp
mtd0をmtd0.ddというファイル名でダンプします。
# dd if=/dev/mtdblock/0 of=mtd0.dd
496+0 records in
496+0 records out
ダンプしたファイルをブラウザを使ってダウンロードします。mtd0.dd をダウンロードするには、http://192.168.11.1//html/py-db/tmp/mtd0.dd にアクセスします。アカウントは先程と同じく、IDがbufpy、パスワードはotdpopyです。
ダウンロードが終わりましたら、mtd0.dd を削除します。
# rm mtd0.dd
mtd1~6までを同様の手順でバックアップします。(手順割愛)
次に、ルーターのLAN側インターフェスのMACアドレスを確認します。以下はAA:AA:AA:AA:AA:AAと表記していますが、もちろんルーターによって値は変わりますので適宜読み替えてください。
※ ルータ側面に貼られているシールのSSIDの値がこのMACアドレスになっているようなので、そこから判断しても構いません。
# ipconfig br0
br0 Link encap:Ethernet HWaddr AA:AA:AA:AA:AA:AA
inet addr:192.168.11.1 Bcast:192.168.11.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:15843 errors:0 dropped:0 overruns:0 frame:0
TX packets:19273 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2127383 (2.0 MiB) TX bytes:10746171 (10.2 MiB)
tftpでファームウェアインストールできるように、accept_open_rt_fmtを1に設定します。
# ubootenv set accept_open_rt_fmt 1
telnetでの作業は終わりです。exitで抜けましょう。
# exit
ホストとの接続が切断されました。
OpenWrtのインストール
いざOpenWrtのインストールです。作業はC:\openwrtフォルダで実施していきますので、なければ作っておいてください。
このフォルダに、ファームウェア lede-17.3vlnjs2H.01.2-ar71xx-generic-whr-g301n-squashfs-tftp.bin をダウンロードしておきます。
※ Wifiでインターネットに繋いでて、LANケーブルでルーターに接続している場合、有線側の優先度が高くなるため、インターネットアクセスがエラーになります。ファームウェアをダウンロードしていない場合は、一旦LANケーブルを抜いてみてください。
管理者として実行されているコマンドプロンプトで、C:\openwrt に移動します。
C:\> cd C:\openwrt
C:\openwrt> dir
ドライブ C のボリューム ラベルは Windows です
ボリューム シリアル番号は XXXX-XXXX です
C:\openwrt のディレクトリ
2022/05/07 21:33 <DIR> .
2022/05/07 21:33 <DIR> ..
2022/05/07 21:33 3,473,444 lede-17.01.2-ar71xx-generic-whr-g301n-squashfs-tftp.bin
1 個のファイル 3,473,444 バイト
2 個のディレクトリ 27,196,813,312 バイトの空き領域
ルーターのMACアドレス(AA:AA:AA:AA:AA:AA)を、192.168.11.1でWindowsのARPテーブルに登録します。ここで、MACアドレスの表記は、":"ではなく、"-" で区切る必要があるので注意。
※ MACアドレスとアダプタ名(ethernet)は適宜読み替えてください。
C:\openwrt>netsh interface ipv4 set neighbors "ethernet" 192.168.11.1 AA-AA-AA-AA-AA-AA
ARPテーブルに登録されたことを確認します。
C:\openwrt>arp -a
インターフェイス: 192.168.11.2 --- 0xa
インターネット アドレス 物理アドレス 種類
192.168.11.1 aa-aa-aa-aa-aa-aa 静的 ★ここが静的になっていること
~略~
コントロールパネルからネットワークアダプタの設定を開き、PCのIPアドレスを192.168.11.2/255.255.255.0に固定します。
Windowsセキュリティを開いて、使用しているネットワークのファイアウォールを無効化します。
これで準備は完了です。コマンドプロンプトに以下のコマンドを打ち込んでおきます。(実行はまだ)
※ tftp コマンドがインストールされていない場合は、telnetコマンド同様にコントロールパネルのプログラムと機能よりインストールしておきましょう。(詳細割愛)
C:\openwrt>tftp -i 192.168.11.1 PUT C:\openwrt\lede-17.01.2-ar71xx-generic-whr-g301n-squashfs-tftp.bin
ルータの電源を一旦抜き、再度挿した後、5~8秒後ぐらいに上記コマンドを実行します。
※ 電源投入後、L2スイッチのランプがリンクアップした後、一瞬消えます。私はそのタイミングで実行すると成功しました。
以下の通り「転送を正常に完了しました」が表示されれば成功です。DIAGの赤いLEDが点滅後、緑の点滅に変わり、点灯に変われば書き込み完了です。(DIAGは消灯しませんでした)
C:\openwrt>tftp -i 192.168.11.1 PUT C:\openwrt\lede-17.01.2-ar71xx-generic-whr-g301n-squashfs-tftp.bin
転送を正常に完了しました: 2 秒間に 3473444 バイト、1736722 バイト/秒
もし転送が正常に完了したのに、バッファローの管理画面が表示されてしまう場合は、前述のaccept_open_rt_fmtを1に設定し忘れていないか確認しましょう。
後始末とOpenWrtへのログイン
ARPテーブルに登録したルーターのMACアドレスは削除します。
C:\openwrt>netsh interface ipv4 delete neighbors "ethernet" 192.168.11.1
OK
ファイアウォールも必要に応じて、有効に戻しておきましょう。さらに、PCに設定したIP (192.168.11.2) も自動に戻しておきます。
これで、OpenWrtのデフォルトのネットワークセグメントのIPがDHCPで自動でPCに割り振られるはずです。私の環境では、192.168.1.233 が設定されました。
ブラウザでhttp://192.168.1.1にアクセスして、OpenWrtの画面が表示されることを確認して作業完了です。
※ デフォルトではrootにパスワードは設定されていません。
ログイン後の画面例も載せておきます。
LinuxでPPPoEがうまく繋がらなかったので、PPPoEの最初のパケット(PADI)をコマンドで投げてみた。
# pppoe -I eth0 -A
Got a Relay-ID: 01 00 00 00 xx xx xx xx xx xx
Access-Concentrator: e14xxxxxx-xxxxxxxxxx
Got a cookie: c9 ef 55 8a xx xx xx xx xx xx xx xx xx xx xx xx
AC-Ethernet-Address: 2c:xx:xx:xx:xx:xx
--------------------------------------------------
Access-ConnectratorがPPPoEアクセス先(アクセス集線装置)の名、AC-Ethernet-Addressが応答を返したMACアドレスかな?本環境は、間にルータ(PPPoEパススルー有効)がいるので、これはルータのMACアドレスでした。
ちなみに、ルータのPPPoEパススルーを無効にすると、PADOパケットがリレーされなくなり、コマンドは応答しなくなります。
# pppoe -I eth0 -A
pppoe: Timeout waiting for PADO packets
Pixel 3aをAndroid 12にアップデートすると、Google系サービスが使えなくなり、Chromeがクラッシュしたり、Google Playで"認証してください"といったエラーが出たりするようになりました。もちろんGmailも見られないし、Googleアカウントの追加も削除もできません。
こちらのHELPでも大量の報告があがっており、2022/1/9現在 Google Playを無効化するとよいとの情報もありますが、当方の環境では無効化できず、大変困ってる状況です。
(2022/1/11 追記)
その後、以下の方法で改善しましたので、手順をメモっておきます。
Google Play開発者サービスの強制停止
設定から、アプリ→xxx個のアプリをすべて表示→Google Play開発者サービス を選択肢、「強制停止」を押します。
強制停止がグレイアウトされていて押せない場合、設定から、セキュリティ→デバイス管理アプリ→デバイスを探す が有効になっている可能性があります。これをOFFにすることで、私の環境ではGoogle Play開発者サービスの強制停止ができるようになりました。
Google Play開発者サービスのアップデートの無効化
強制停止に成功したら、次は「無効にする」を押します。
Google Play開発者サービスのアップデートのアンイストール
Google Play開発者サービスの設定画面の右上の「︙」から「アップデートのアンイストール」押します。
Google Play開発者サービスのキャッシュやデータの削除
「ストレージとキャッシュ」より、「キャッシュを削除」を押します。
さらに、容量を管理を押して、一番下の「データをすべて消去」を押します。
Google Play開発者サービスの有効化
最後Google Play開発者サービスを有効にします。
以上で、無事にGoogle系サービスが復活しました。この時、大量に未受信のメールや各種通知が届くのでご注意ください。
最後、必要に応じて無効化した「デバイスを探す」を有効にしておきましょう。
Backing Fileを持つqcow2ファイル(差分)を、Backing Fileとマージして一つのファイルにする方法についてのメモ。
Backing FileをA.qcow2, 差分ファイルをB.qcow2とします。単純に差分BをAにマージしたいだけなら
# qemu-img commit B.qcow2
でよいですが、これだとBacking File(ベースとなるイメージ)にBの内容がマージされるため、A自体が書き換わってしまいます。
そのため、BのBacking FileをAからCに変更後、commitします。
まずは、AをCとしてコピーします。
# cp A.qcow2 C.qcow2
BのBacking FileをAからCに変更します。
# qemu-img rebase -b C.qcow2 B.qcow2
変更後、commit します。
# qemu-img commit B.qcow2
これで、C.qcow2 に B.qcow2の内容がマージされますので C.qcow2 を単体のqcow2ファイルとして利用できます。
ThunderbirdでIMAPを使用していると、受信トレイに入っている新着メールは確認できるのですが、GmailのようなIMAPサーバ側の設定で自動でサブフォルダにメールを振り分けていると、Thnuderbird側で新着メールは確認できません。これはフォルダを右ウリックしプロパティを開いて「このフォルダーに新着メッセージがないか確認する」にチェックすると自動で新着を確認してくれるのですが、フォルダが多いと面倒です。
デフォルトで全フォルダをチェックしたい場合、Thunderbirdのデフォルト設定を変更すると実現できます。具体的には「ツール」→「オプション」の「一般」の「設定エディタ」を開き、「mail.server.default.check_all_folders_for_new」で検索し、値を「true」にしましょう。
※ 私は現在バージョン78を使ってますが、古いバージョンでは、「mail.check_all_imap_folders_for_new」という設定値のようです。
これで、フォルダ振り分けしたメールの新着も確認できるようになりました。
Ubuntu 20.04を使って、プロバイダのIPv6 PPPoEサービスに接続してみた時のメモ。
# apt-get install pppoe pppoeconf
設定ツールを起動
# pppoeconf
いろいろ聞かれますが、以下のよう設定しました。
一般的なダイヤルアッププロバイダを使っているほとんどの人は、 'noaut'オプションと'defaultroute'オプションを設定に選び、 'nodetach'オプションを削除するのがよいでしょう。あなたの設定 ファイルを確認して、これらの設定を必要に応じて変更しますか?
⇒ はいを選択
以下の入力ボックスに、あなたのプロバイダへのPPPログインに通常 必要となるユーザ名を入力してください。もしヘルプ画面を見たいの であれば、ユーザ名を削除して「OK」を押してください。
⇒ プロバイダから提供された接続ユーザ名を入力して了解を選択。今回はmyusernameと想定。
以下の入力ボックスに、あなたのプロバイダへの PPPログインに 通常必要となるパスワードを入力してください。
⇒ プロバイダから提供された接続パスワードを入力して了解を選択
通常のホスト名を解決するためには、少なくとも1つのDNSIPアド レスが必要です。通常、あなたのプロバイダは、接続確立時に 利用可能なサーバのアドレスを送ってきているはずです。これら のアドレスを自動的にローカル/etc/resolv.confファイルのネー ムサーバのリストに追加しますか? (推奨します)
⇒ はいを選択
ほとんどのプロバイダは 1460 以上の MSS の IPケットをサポー トしないルータを持っています。 ~略~ pppoe で MSS を 1452 バイトに制限しますか?
⇒ はいを選択
PPPDが設定されました。ブート時に接続を開始するようにしますか?
⇒ はいを選択
これで、"pon dsl-provider" で DSL 接続を行い、"poff"で切断 できるようになりました。今接続を開始しますか?
⇒ 今接続しないので、いいえを選択
ここまで設定すると、/etc/ppp/peers/dsl-provider というファイルにこのような設定が書き込まれます。
noipdefault
defaultroute
replacedefaultroute
hide-password
#lcp-echo-interval 30
#lcp-echo-failure 4
noauth
persist
#mtu 1492
#persist
#maxfail 0
#holdoff 20
plugin rp-pppoe.so eth0
user "myusername"
usepeerdns
なお、パスワードは、/etc/ppp/chap-secrets や /etc/ppp/pap-secrets に保存されています。
ただし上記設定だと、IPv6でうまく繋がりません。設定パラメータの解説は、man pppd コマンドや http://man.he.net/man8/pppd , https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=477245辺りを参考にしながら、以下2行を追記しました。
+ipv6
ipparam ipv6default
そして、/etc/ppp/ipv6-up.d/routing ファイルを作ります。この設定により、接続時にIPv6のルートが自動で追加されるようになります。(ファイルに実行を付けてください)
#!/bin/sh
if [ -z "${CONNECT_TIME}" ]; then
if [ "${PPP_IPPARAM}" = "ipv6default" ]; then
ip -6 route add default dev ${PPP_IFACE}
fi
fi
その他、にろきのメモ帳 や ももいろテクノロジー を参考に、/etc/sysctl.conf に以下を追加
net.ipv6.conf.all.accept_ra = 0
net.ipv6.conf.ens160.accept_ra = 0
設定を反映
# sysctl -p
次に、IPv6接続時にDHCPを使う設定をします。dhcpcdをインストール
# apt-get install dhcpcd5
/etc/dhcpcd.conf に以下を追記
noipv6rs
interface ppp0
ipv6rs
iaid 1
ia_pd 1 eth0
dhcpcdを起動
# systemctl start dhcpcd.service
最後にPPPoEで接続します。
※ dsl-provider は、/etc/ppp/peers ディレクトリに作られるファイル名になります。pon時の名前を変更したい場合、ファイル名を変更するだけでいけます。
# pon dsl-provider
接続が完了すると、eth0の情報を見るとこんな感じになりました。
※下記は実際のIPではないです
※黄色の箇所が接続後に追加で表示された箇所です。
# ip address show 2: eth0: mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether b8:27:aa:bb:cc:dd brd ff:ff:ff:ff:ff:ff inet 172.16.0.1/16 brd 172.16.0.255 scope global eth0 valid_lft forever preferred_lft forever inet6 2001:aaaa:bbbb:cccc:1/64 scope global dynamic noprefixroute valid_lft 14379sec preferred_lft 14379sec inet6 fe80::aaaa:bbbb:cccc:dddd/64 scope link valid_lft forever preferred_lft forever 49: ppp0: mtu 1454 qdisc fq_codel state UNKNOWN group default qlen 3 link/ppp inet6 fe80::aaaa:bbbb:cccc:dddd/10 scope link valid_lft forever preferred_lft forever
試しに google に ping を実行してみます。以下のようにIPv6で通信できました。
# ping www.google.co.jp PING www.google.co.jp(nrt12s17-in-x03.1e100.net (2404:6800:4004:80d::2003)) 56 データ長(byte) 64 バイト応答 送信元 nrt12s17-in-x03.1e100.net (2404:6800:4004:80d::2003): icmp_seq=1 ttl=116 時間=5.39ミリ秒 64 バイト応答 送信元 nrt12s17-in-x03.1e100.net (2404:6800:4004:80d::2003): icmp_seq=2 ttl=116 時間=6.03ミリ秒
ちなみに、接続を切るのはpoffです。
# poff dsl-provider
ラズパイにUbuntu 20.04を入れて、いざssh接続しようとしたら接続できません・・・
/var/log/syslog を見ると、
sshd: no hostkeys available -- exiting
というログが出ており、どうやらSSHサーバのキーが生成されていないようです。最初はOSのインストールに失敗したのかな?と思ったりしましたが、2回目同じ症状だったので、ここに対処方法を残しておきます。
とはいえ、以下のコマンドでキーを生成するだけです。
# ssh-keygen -A
生成が完了したら、sshを起動してあげましょう。
# systemctl start ssh
以前のUbuntuでは、固定IPを使いたい場合 /etc/network/interfaces に設定を書いてましたが、ubuntu 20.04ではこのファイルはなく、/etc/netplan に設定ファイルをyaml形式で書く必要があります。
(例) /etc/netplan/99-network.yaml
※ /etc/netplan/ には 50-cloud-init.yaml というファイルがありますが、これを書き換えるのではなく、このファイルより辞書順で後になるようなファイル名で新規にファイルを作成します。参考
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: false
dhcp6: false
addresses: [172.16.0.2/16]
gateway4: 172.16.0.1
nameservers:
addresses: [1.1.1.1]
設定項目は説明する程ではないと思いますが、上記では8行目で固定IP(ipv4)として172.16.0.2/16を設定してます。またデフ2ォルトGWに172.16.0.1, DNSに1.1.1.1を設定しています。
上記ファイルを作成し以下のコマンドを叩くと設定が反映されます。
# netplan apply
applyではその設定がすぐに反映されますが、リモートでのIPの変更はリスクを伴います。そのリスクを避けたければ、代わりに以下のコマンドを叩いてみてください。以下ではコマンド実行後5秒間以内にEnterを押さないと設定が元に戻ります。
# netplan try --timeout 5
Warning: Stopping systemd-networkd.service, but it can still be activated by:
systemd-networkd.socket
Do you want to keep these settings?
Press ENTER before the timeout to accept the new configuration
Changes will revert in 3 seconds [Enterをここで押す]
Configuration accepted.
WSL2は本物のLinuxカーネルが動くという性質上、大量のディスク読み書きなどすると大量にキャッシュとしてメモリが消費されてしまい、ホストのメモリを食いつぶしてしまいます。ホストにあまりメモリが積まれておらずホストが激重になってしまいましたので、WSL2のメモリ量を固定してみました。
Windows10のエクスプローラーで、%USERPROFILE% を開き、.wslconfig というファイルがなければテキストファイルとして新規にファイル作成し、以下を書き込みます。
[wsl2] memory=4GB swap=2GB
上記は、メモリを4GBに固定し、スワップに2Gを設定しています。ホストのメモリ量に応じて適宜変更してください。
変更後、WSL2 を再起動する必要があります。
コマンドプロンプトを管理者権限で開きWSL2を停止します。
C:> wsl --shutdown
再度、WSL2を起動(Ubuntu等のアイコンをクリック)し、Linuxのコマンドラインで以下を実行し、メモリ量やスワップの量が指定した値になっているかを確認します。
$ cat /proc/meminfo MemTotal: 4028424 kB MemFree: 3950724 kB MemAvailable: 3847712 kB Buffers: 5748 kB Cached: 8576 kB SwapCached: 0 kB Active: 12532 kB Inactive: 3752 kB Active(anon): 2012 kB Inactive(anon): 8 kB Active(file): 10520 kB Inactive(file): 3744 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 2097152 kB SwapFree: 2097152 kB Dirty: 48 kB Writeback: 0 kB AnonPages: 2060 kB Mapped: 4100 kB Shmem: 68 kB Slab: 21744 kB SReclaimable: 11912 kB SUnreclaim: 9832 kB KernelStack: 1480 kB PageTables: 108 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 4111364 kB Committed_AS: 3108 kB VmallocTotal: 34359738367 kB VmallocUsed: 0 kB VmallocChunk: 0 kB Percpu: 944 kB AnonHugePages: 0 kB ShmemHugePages: 0 kB ShmemPmdMapped: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB Hugetlb: 0 kB DirectMap4k: 15360 kB DirectMap2M: 4177920 kB
参考 : https://docs.microsoft.com/ja-jp/windows/wsl/wsl-config
Ubuntu同梱のDocker.io をインストールすると、service コマンドで起動できないので、Dockerコミュニティ版を使用します。root ユーザで以下コマンド叩きます。
# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - # add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable" # apt install -y docker-ce # service docker start
動作確認
# docker info