เปิดเว็บบน wsl แต่เข้าผ่าน ip window ไม่ได้

Piravit Chenpittaya
1 min readJan 25, 2022

Access web hosted on 0.0.0.0 on wsl through local window’s ip

TL;DR ยาวไปไม่อ่าน

Port forwarding
Ex.window_ip:500 ->wsl_ip:5000
wsl_ip = 172.18.145.185 ( ifconfig(eth0))

  1. port-forwading wsl-window
netsh interface portproxy add v4tov4 listenport=5000 listenaddress=0.0.0.0 connectport=5000 connectaddress=172.18.145.185

or use this Powershell Script:
just give it a port number, it’s of lazy guy like me :)

2. add rule to firewall

netsh advfirewall firewall add rule name="WebDev port 5000" dir=in action=allow protocol=TCP localport=5000;

อธิบาย
ตัวอย่างเว็บเช่น simple-appy.py อันนี้

host=”0.0.0.0" จะทำให้สามารถเข้าถึงเว็บนี้ได้ผ่าน ip ของเครื่อง http://[ip]:5000 บนคอมไหนก็ได้ที่อยู่ในเครือข่ายเดียวกัน

แต่ wsl มันเป็นเครือข่ายที่อยู่หลัง window เรา ทำให้ไม่มีใครรู้จักนอกจากเราเอง ดังนั้นจึงต้องใช้วิธีการ port-forwarding ด้วย netsh นั้นเองจ้า

โดยสิ่งที่เราต้องการคือ ip ของ wsl สามารถดูได้ด้วยคำสั่ง ifconfig ที่ eth0 แล้วนำไปใส่ในคำสั่ง เช่น wsl ip=172.18.145.185

netsh interface portproxy add v4tov4 listenport=5000 listenaddress=0.0.0.0 connectport=5000 connectaddress=172.18.145.185

จากนั้นต้องเพิ่มกฏเข้าไปที่ firewall ด้วยว่าให้ Port ที่เราต้องการสามารถเข้ามาได้โดย

netsh advfirewall firewall add rule name="ชื่ออะไรก็ได้กำหนดเอง" dir=in action=allow protocol=TCP localport=5000;

ตอนนี้เราสามารถเข้าผ่าน ip window ได้แล้วเช่น window_ip= 192.168.1.4
ก็เข้า 192.168.1.4:5000 ก็จะนำเราไปสู่ 172.18.145.185:5000 ทันที!

หรือใช้ powershell script ที่แค่ใส่เลข port อย่างเดียวก็ได้ โค้ดอยุ่ข้างบน
(require administrator)

คำสั่งเพิ่มเติม
ลบที่ตั้งค่าไปแล้วทั้งหมดทิ้งได้ด้วย

netsh interface portproxy reset

และ ดูว่า forward อะไรไปบ้าง

netsh interface portproxy show all

--

--

Piravit Chenpittaya
Piravit Chenpittaya

Written by Piravit Chenpittaya

call me karn | Computer of Engineering : PSU | IG: karn.svg | git: https://github.com/karnzx /

No responses yet