เปิดเว็บบน wsl แต่เข้าผ่าน ip window ไม่ได้
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))
- 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