Tag Archive proxy

แก้ composer, npm ผ่าน proxy แล้วไม่ทำงาน

เป็นเรื่องปกติที่เน็ตใน office ใหญ่ๆ มันจะอยู่หลัง proxy ที่จะกรองข้อมูลเข้าออก แต่แปลกคือเปิดเว็บใน chrome firefox IE ได้หมด แต่ตัว command line dos ตัวน้อยๆ น่ารัก ที่ติดมากับ windows มีปัญหาไม่สามารถติดตั้ง package ต่างๆ ผ่าน composer หรือ npm ได้

เพราะว่าสำนักงานอาจจะใช้ NTLM หรือ Kerberos มาทำเป็น proxy โดยไม่ได้สนใจว่า dos, command line แม้แต่น้องใหม่ powershell อะไรพวกนี้มันต่อเน็ตไม่ได้ 100% ทั้ง ๆ ที่ ping ออกไปได้ เอา url ไปเปิดดูก็ได้ แต่ทั้ง composer ทั้ง npm มันบอกว่าต่อเน็ตไม่ได้ network เค้าก็บอกไม่ได้บล๊อกนะ ทำไม่เป็นแบบนี้ไม่รู้เหมือนกัน

วิธีแก้คือหาโปรแกรม authentication proxy, forward proxy, reverse Proxy มาช่วย เดิมเคยใช้ Cntlm Authentication Proxy โดนเคยเขียน forward proxy ด้วย cntlm ไว้แต่พี่แกแทบจะไม่พัฒนาต่อแล้ว เลยเปลี่ยนมาใช้ Px แทน

การติดตั้ง

  1. สร้าง folder ไว้เก็บโปรแกรม เช่น C:\px
  2. โหลดมาจากหน้า https://github.com/genotrance/px/releases/tag/vHEAD จะมีตัวที่เป็น .exe ให้โหลดมาเก็บไว้ที่ C:\px
  3. เปิด command line แล้ว
    1. cd c:/
    2. cd c:\px
    3. ถ้า proxy ของ office คือ 192.168.1.33 port 3128 ก็พิมพ์
      px –192.168.1.33:3128 –save
    4. px –install
  4. เปิดไฟล์ C:\px\px.ini ตามคู่มือ Configuration ออกมาแก้ เช่น
[proxy]
allow = *.*.*.*
auth =
gateway = 0
hostonly = 0
listen = 127.0.0.1
noproxy = 192.168.1.*
pac =
port = 3129
server = 192.168.1.33:3128
useragent =
username =

[settings]
foreground = 0
idle = 30
log = 0
proxyreload = 60
socktimeout = 20.0
threads = 5
workers = 8

แก้ windows environment สมมุติว่า 3128 คือ port ที่ตั้งไว้ใน [proxy] จะได้

VariableValue
HTTP_PORXYlocalhost:3129
HTTP_PROXY_REQUEST_FULLURI0
HTTPS_PROXYlocalhost:3129
HTTPS_PROXY_REQUEST_FULLURI0

ถ้าไม่เคยตั้งค่า Windows Environment Variables อ่านได้จาก

เปิดไฟล์ C:\Windows\System32\drivers\etc\hosts
แก้จาก

# localhost name resolution is handled within DNS itself.
#	127.0.0.1       localhost
#	::1             localhost

เป็น

# localhost name resolution is handled within DNS itself.
	127.0.0.1       localhost
	::1             localhost

restart แล้วลง composer และ npm ใหม่ ตัวติดตั้งเห็นเห็น Windows Environment Variables แล้วตั้งค่า proxy ให้เอง

forward proxy ด้วย cntlm

มีวิธีที่ดีกว่าตัวนี้ แก้ composer, npm ผ่าน proxy แล้วไม่ทำงาน

ทำให้ command line มันสามารถออกไปอินเตอร์เน็ตได้หลัง proxy ntlm ขวางอยู่โดยใช้ cntlm ไม่ยากเลยแค่ทำตามวิธีง่ายๆ

  1. ก่อนอื่นก็ไปโหลด Cntlm Authentication Proxy
  2. ติดตั้งแล้วเปิดไฟล์ C:\Program Files (x86)\Cntlm\cntlm.ini แก้โดย
    Username

    ใส่ user ของ proxy ntlm ลงไปเช่น pitt.p

    Domain

    domain ที่ใช้ login windows ก่อน username นั่นละ

    Password

    password ที่ใช้ login windows

    Proxy

    คือ proxy ที่ใช้เข้าเน็ตที่เซ้ตไว้ใน windows ถ้าไม่รู้ก็ดูจาก How to Configure a Proxy Server on Windows บางครั้งอาจจำต้องดูจากไฟล์ .pac อีกทีว่าบรรทัด ที่มีคำว่า “proxy ” มันชี้ไปที่ไหน
  3. เซ็ต environment variables ตามวิธี How to set the path and environment variables in Windows ถ้าเซ้ตไม่ได้ มีอีกวิธี แก้ / เพิ่ม windows environment variables registry โดยกำหนด http_proxy และ https_proxy ให้มีค่าเท่ากับ 127.0.0.1:3128
  4. restart และลองใช้ command อย่าง เช็คเน็ตตัวย curl ดูว่าใช้ได้มั๋ย

เพื่อความมันใจอาจจะแก้ password ที่เก็บเป็น plain text password ให้มันปลอดภัยขึ้นโดยการเข้าระหัสมันซะก็ทำตามวิธี Using CNTLM to enable NTLMv2 authentication for any application

จริงๆ แล้วมี ntlm proxy forwarder อีกหลายตัว บางตัว update บ่อยกว่าตัว cntlm มาก เช่น px หรือ NTLM Authorization Proxy Server แต่ผมไม่เคยใช้ อาจจะดีกว่า อันนี้ต้องลองดูครับ

อ่านเพิ่มเติม

เช็คเน็ตตัวย curl

อ่านหัวข้อแล้วอาจจะงงทำไม่ไม่เปิดกับ browser ละง่ายจะตาย ความจริงคือ composer มันไม่สามารถติดตั้งอะไรได้เลย แม้แต่ตัวมันเอง แต่สามารถใช้ command ping ได้ปกติ คนทำ proxy ก็บอกของเค้าปกติ เลยต้องใช้ curl มาเปิดเว็บดู

ทดลองโดยใช้ [code language=”text” title=”curl open web”]curl -v http://pitt.plusmagi.com[/code] ที่นี้เห็นชัดเลยว่า มันไม่ผ่าน authen ของ proxy ทั้งๆ ที่เปิดเว็บเข้าไปดูอะไรต่ออะไรได้ปกตินั่นละ url เดียวกัน port เดียวกัน แต่ดึงข้อมูลกับ command กลับไม่ได้ ไม่เอา ผล ให้ดูนะเดี๋ยวชื่อ server เค้าจะหลุดออกมาข้างนอก แต่มันบอกตรงตัวเลยว่า ติด authen ที่ ntlm proxy มันนี่ละไม่ต้องหาอื่นไกล ทดลองอีกทีโดยใช้ [code language=”text” title=”curl open web with proxy”]Curl -x { proxy name / proxy ip }:{ port } –proxy-user { domain name ตอน login windows }\{ username }: password -L http://pitt.plusmagi.com[/code] username, password และ domain ก็ตัวที่ใช้ออกเน็ตนี่ละ ดูจากผล command line ออกเน็ตผ่าน proxy ได้แล้วละ

เจอสาเหตุแล้วที่นี้เรามาแก้ให้ออกเน็ตกับ command line ได้กัน forward proxy ด้วย cntlm