以åã®è¨äºã§ãWSL2ã¯ãå¥ãã·ã³ãã ã¨æ¸ãã¾ãããVMã¨ãã¦ç¬ç«ãã¦ãã¦ãWindowsã¨ã¯æç¢ºãªå£ãããã
WSL2ã§Webãµã¼ããèµ·åããã¨ãWindowsã®ãã©ã¦ã¶ããlocalhost:3000ã§æ®éã«ã¢ã¯ã»ã¹ã§ãããå¥ãã·ã³ãªã®ã«ããªãlocalhostã§ç¹ããã®ãï¼ãçç¾ãã¦ã¾ããï¼
åãæåæ··ä¹±ãã¾ããããWSL2ã¨Windowsãåãlocalhostãå
±æãã¦ããã®ãï¼ãã¨ãã¨ãããéæ¹åã ã¨ããã§ã¯ãªããWindowså´ã§èµ·åãããµã¼ãã«ãWSLããlocalhostã§ã¢ã¯ã»ã¹ãããã¨ããã¨ãå±ãã¾ããã
ãã®æåã¯ãWSL2ã®NATãããã¯ã¼ãã³ã°ã¢ã¼ãã¨ãMicrosoftãå®è£ ãããçæ¹åã®localhostè»¢éæ©æ§ãã«ãããã®ã§ãããã®é対称æ§ãçè§£ããã°ãWSL2ã®ãããã¯ã¼ã¯æåã§æ··ä¹±ãããã¨ã¯ãªããªãããã§ãã
- WSL2ã®NATãããã¯ã¼ãã³ã°ã¢ã¼ãã®åºæ¬
- localhost転éã®é対称æ§ï¼ä¸»è¦ãª2ã¤ã®ã±ã¼ã¹
- localhost転éã®å®è£ ã¡ã«ããºã
- Mirroredã¢ã¼ãã«ããæ¹å
- ã¾ã¨ã
WSL2ã®NATãããã¯ã¼ãã³ã°ã¢ã¼ãã®åºæ¬
WSL2ã®ããã©ã«ããããã¯ã¼ã¯ã¢ã¼ãã¯ãNATã§ãã以åã®è¨äºã§èª¬æããéããWSL2ã¯ãå¥ãã·ã³ããVMã¨ãã¦ç¬ç«ãã¦ãã¦ãWindowsã¨ã¯ä»®æ³NICçµç±ã§ç¹ãã£ã¦ãã¾ãã
ãã®æ§é ä¸ãWSL2 VMã¯ãã©ã¤ãã¼ãIPï¼172.x.x.xç³»ã®ã¢ãã¬ã¹ï¼ãæã¤å¥ãã¹ãã«ãªãã¾ããæ¬æ¥ãlocalhostï¼127.0.0.1ï¼ã¯åOSå ã®ã«ã¼ãããã¯ã¢ãã¬ã¹ã«éãã¾ãããå¥ãã·ã³éã§ã¯å ±æãããªããWindowsã®localhostã¯windowsèªèº«ãWSLã®localhostã¯WSLèªèº«ãæãã¾ããããæ®éã®ãããã¯ã¼ã¯ã®è©±ã§ãã
ã ãããããWindowsããWSL2ã®ãµã¼ãã¸localhostã§ã¢ã¯ã»ã¹ã§ãããã¨ã䏿è°ãªãã§ããçè«ä¸ã¯ä¸å¯è½ãªã¯ããã§ãå®éã«ã¯åãã種æãããããã¨ãMicrosoftããèªåçãªlocalhostè»¢éæ©æ§ããå®è£
ãã¦ããããã§ããNATå¢çãè¶ãã¦ãã¾ãã§localhostãå
±æããã¦ãããã®ããã«è¦ãããããå½±æ¦è
ã®ãããªä»æãã§ãã

ãã®å³ã®ããã«ãNAT networking modeã§ã¯ãWindows-WSL2éã«æç¢ºãªå¢çãããã¾ããã ãã©ãlocalhostè»¢éæ©æ§ï¼ç·è²ï¼ãçæ¹åã«åå¨ãããããããçç¾ãçãã§ããããã«è¦ããåå ã§ãã
localhost転éã®é対称æ§ï¼ä¸»è¦ãª2ã¤ã®ã±ã¼ã¹
ã±ã¼ã¹1ï¼Windows â WSLæ¹åï¼èªåçã«ç¹ããï¼
WSLå´ã§Webãµã¼ããèµ·åãã¦ã¿ã¾ãã
# WSLå´ï¼Linuxï¼ python3 -m http.server 8080
ãµã¼ããç«ã¡ä¸ããã¾ããã0.0.0.0:8080ã§å¾ ã¡åãã¦ãã¾ãã
次ã«ãWindowsã®ãã©ã¦ã¶ããhttp://localhost:8080ã«ã¢ã¯ã»ã¹ããã¨ãæ®éã«ç¹ããã¾ãããã¼ã¸ã表示ãããããªãã§ãããï¼ãWSL2ã¯å¥ãã·ã³ãªã®ã«ã
çãã¯ãMicrosoftããWindows â WSLæ¹åãã«éå®ãã¦ãlocalhostè»¢éæ©æ§ãèªåçã«æå¹åãã¦ããããã§ããWSLå´ã0.0.0.0ã127.0.0.1ã§ãã¼ãã«bindããã¨ãWindowså´ã§wslrelay.exeã¨ããããã»ã¹ãå½±æ¦è
ãªã¹ãã¼ãç«ã¦ã¾ããWindowsã¢ããªãlocalhost:8080ã¸ã¢ã¯ã»ã¹ããã¨ããã®å½±æ¦è
ãåãåã£ã¦ãVMå
ï¼WSLå´ï¼ã®ãµã¼ãã¸ä¸ç¶ãããvsockã¨ããä»®æ³ã½ã±ããæè¡ã使ã£ã¦ã
wslrelay.exe is a windows executable that is used to relay network and debug console traffic from Linux to Windows.
ã¦ã¼ã¶ã¼ã¯ä½ãæèãã¾ããããWSL2ã§ãµã¼ãç«ã¦ãããWindowsããæ®éã«localhostã§è¦ããããã§çµãããéæ³ã¿ããã§ãããå ¬å¼æ©è½ã§ãã
注æç¹ã1ã¤ãWSLãµã¼ãã127.0.0.1ã®ã¿ã§bindãã¦ããå ´åã転éãå¹ãã¾ããã0.0.0.0ã§bindããã°åãã¾ãã
ã±ã¼ã¹2ï¼WSL â Windowsæ¹åï¼localhostã§ã¯å±ããªãï¼
éæ¹åã試ãã¾ããWindowså´ã§ãµã¼ããèµ·åãã¾ãã
# Windowså´ï¼PowerShellï¼ python -m http.server 9000
ãµã¼ããç«ã¡ä¸ããã¾ãããæ¬¡ã«ãWSLããlocalhost:9000ã¸ã¢ã¯ã»ã¹ãã¦ã¿ã¾ãã
# WSLå´ï¼Linuxï¼ curl http://localhost:9000
å±ãã¾ããããªããï¼
WSLå
ã®localhostï¼127.0.0.1ï¼ã¯ãWSLèªèº«ï¼VMå
Linuxï¼ã®ã«ã¼ãããã¯ã ããã§ããWindowsã«ã¯å±ããªããNATæ§é ä¸ãWSLã¨Windowsã¯å¥ãã¹ããããã¦ããã®æ¹åã®localhostè»¢éæ©æ§ã¯ãããã©ã«ãã§ã¯åå¨ãã¾ãããçæ¹åãªãã§ãã
ãããã©ãããããWindowsã®ãã¹ãåã¾ãã¯IPãæç¤ºçã«æå®ãã¾ããMicrosoftå ¬å¼ããã¥ã¡ã³ãã§ã¯ã以ä¸ã®æ¹æ³ãæ¨å¥¨ãã¦ãã¾ãã
ip route show | grep -i default | awk '{ print $3}'
注æç¹ãããã¾ããWindowså´ã®ãµã¼ãã127.0.0.1ï¼localhostã®ã¿ï¼ã§bindãã¦ããã¨ãWSLãããã¹ãIPã§å©ãã¦ãæå¦ããã¾ããWindowså´ã0.0.0.0ã§bindãã¾ããããã«ãWindowsãã¡ã¤ã¢ã¦ã©ã¼ã«ã§ãã¼ãã許å¯ããè¨å®ãå¿ è¦ã«ãªãå ´åãããã¾ãã
ã¡ãªã¿ã«ãLANã®å¥PCããWSL2ã®ãµã¼ãã¸ã¢ã¯ã»ã¹ãããå ´åãããã«ä¸æéãnetshã§ãã¼ããã©ã¯ã¼ãè¨å®ãå¿
è¦ã§ãã
localhost転éã®å®è£ ã¡ã«ããºã
NAT networking modeã«ããã¦ããªãWindowsâWSLæ¹åã®ã¿localhostã§ç¹ããã®ã§ããããã
localhostForwardingã¨ã¯
.wslconfigã¨ãããã¡ã¤ã«ã«ãlocalhostForwardingã¨ããè¨å®ãããã¾ããããã©ã«ãå¤ã¯trueã§ãã
localhostForwarding=true
ãã®è¨å®ã¯ãNAT networking modeã«ããã¦ãWSL2 VMã®0.0.0.0ã¾ãã¯127.0.0.1ã¸ã®bindããWindowsã®localhostããã¢ã¯ã»ã¹ã§ããããã«ãããã©ããããå¶å¾¡ãã¾ããtrueãªãè»¢éæ©æ§ãæå¹ãfalseãªãç¡å¹ã
éè¦ãªã®ã¯ãããã¯ãWindows â WSLæ¹åãã®è»¢éãå¶å¾¡ããè¨å®ã ã¨ãããã¨ã§ããWSL â Windowsæ¹åã¯å¯¾è±¡å¤ãçæ¹åå°ç¨ã®è¨å®ãªãã§ãã
ä¸ç¶ãæ¯ãã2ã¤ã®ããã»ã¹
å®ã¯ããã®localhost転éã¯2ã¤ã®ããã»ã¹ãå調ãã¦å®ç¾ãã¦ãã¾ããè¦ããªãã¨ããã§ãå°éã«åãã¦ããå½±æ¦è ãã¡ã§ãã
Linuxå´ã§ã¯localhostã¨ããååã®ããã»ã¹ãWSL2 VMèµ·åæã«çæããã¾ããmini_initã¨ããããã»ã¹ã親ã«ãªã£ã¦ãã²ã£ããã¨èµ·åããããã®ããã»ã¹ã®ä»äºã¯ãTCPã®å¾
ã¡åããã¼ãã常ã«ç£è¦ãããã¨ã§ããæ°ãããã¼ãï¼0.0.0.0ã127.0.0.1ã¸ã®bindï¼ãæ¤ç¥ããã¨ãWindowså´ã¸ããã®ãã¼ãã転éãé¡ããã¨ä¸ç¶è¨å®ãä¾é ¼ãã¾ãã
䏿¹ãWindowså´ã§ã¯wslrelay.exeã¨ããããã»ã¹ãã127.0.0.1:portã«ãå½±æ¦è
ãªã¹ãã¼ããç«ã¦ã¾ããWindowsã¢ããªãã127.0.0.1:portã¸ã®æ¥ç¶ãåãåãã¨ããã®ä¸ç¶ããã»ã¹ãLinuxå´ã®localhostããã»ã¹ã¸ãã¼ã¿ãéããLinuxå´ã®localhostããã»ã¹ããæçµçã«WSLå
ã®æ¬æ¥ã®ãµã¼ãã½ã±ããã¸æ¥ç¶ããã
ããããæ å ±ãè¦ã¦ãã¨ããããããã±ããã¯ããããªçµè·¯ã辿ããã¨ã«ãªãã¯ãã§ãã (ref: Blocking I/O behavior in localhost relay hangs with full duplex traffic due to half duplex forwarding logic. · Issue #10688 · microsoft/WSL · GitHub)
- Windowsã¢ã㪠â 127.0.0.1:8080ã¸æ¥ç¶è¦æ±
- wslrelay.exeããªã¹ãã¼ã¨ãã¦åãåã
- vsockã§Linuxå´ã®
localhostããã»ã¹ã¸ä¸ç¶ localhostããã»ã¹ãWSLå ã®ãµã¼ãï¼0.0.0.0:8080ï¼ã¸æ¥ç¶- ã¬ã¹ãã³ã¹ãéé ã§è¿ã
ã¦ã¼ã¶ã¼ã«ã¯è¦ãã¾ãããã§ãããããèå°è£ã§èµ·ãã¦ãã¾ãã
ã©ã®bindã転é対象ã«ãªãã
localhostForwardingã®å®ç¾©ããã ããã¨ããã¨ãåºæ¬çã«WSLå
ã®ãµã¼ãããwildcardï¼0.0.0.0ï¼ã¾ãã¯localhostï¼127.0.0.1ï¼ãã§bindããã¨ãã«è»¢é対象ã¨ãªãããã§ãã
- 0.0.0.0:8000ã§å¾
ã¡åã â Windowså´ã®
localhost:8000ã§å°éå¯è½ - 127.0.0.1:8000ã§å¾
ã¡åã â Windowså´ã®
localhost:8000ã§å°éå¯è½ - WSLã®ç¹å®IPï¼ä¾ï¼172.xx.yy.zz:8000ï¼ã®ã¿ã§bind â èªå転éã®å¯¾è±¡å¤
WSLå´ãç¹å®IPã®ã¿ã§bindãã¦ããå ´åãWindowsããç´æ¥ãã®IPãæå®ãã¦ã¢ã¯ã»ã¹ãã¾ããè»¢éæ©æ§ã¯ä»å¨ãã¾ããã
Mirroredã¢ã¼ãã«ããæ¹å
Windows 11ããã³WSLã®æ°ãããã¼ã¸ã§ã³ã§ã¯ãMirrored networking modeã試é¨çã«æä¾ããã¦ãã¾ããããã¯é対称æ§ãè§£æ¶ããæ¹åã¸ã®æ¹åã£ã½ãã¦ããããããã©ã«ãã®netowrking modeã«ãªã£ã¦ããã®ããããã¾ããã
networkingMode=mirrored
ãã®ã¢ã¼ãã§ã¯ãWSLãWindowsã®ãããã¯ã¼ã¯IFãããã©ã¼ããããããNATå¢çã®åé¡ã軽æ¸ããã¾ããç¹ã«ãWSL â Windowsæ¹åã§ãlocalhostï¼127.0.0.1ï¼ã使ããããã«ãªãããã§ãã
ã¾ã¨ã
WindowsããWSL2ã®ãµã¼ãã¸localhostã§ã¢ã¯ã»ã¹ã§ããã®ã¯ãMicrosoftãå®è£ ããçæ¹åã®è»¢éæ©æ§ã®ãããã§ãããã®ä»çµã¿ã¯ãwslrelay.exeãlocalhostããã»ã¹ã¨ããè¦ç´ ã§æ§æããã¦ãã¾ãã
éæ¹åï¼WSL â Windowsï¼ã¯è»¢éæ©æ§ãåå¨ããªãããããã¹ãIPãæç¤ºçã«æå®ãã¾ããip route show | grep -i default | awk '{ print $3}'ã§Windowsãã¹ãã®IPãåå¾ãã¦ãããã使ãããã®é対称æ§ãçè§£ããã°ãWSL2ã®ãããã¯ã¼ã¯æåã§æ··ä¹±ãããã¨ã¯ãªããªãããã§ãã