Linux子系统固定IP和代理设置

一、导读

环境:OpenEuler、Windows 11、WSL 2

背景:代码在Linux中运行,Windows可以使用代理,而子系统不行,代码无法正常运行

时间:20250226

说明:实现LangGraph自动画图模块,报错,发现访问失败,此处记录一下如何配置

二、配置固定IP

众所周知,windows 会通过虚拟交换机给本机和 wsl2(Linux 子系统)分别分配 ip。于是本机重启或重启 wsl 服务的时候会重新分配 ip。之前所作的端口转发,监听之类的都会失效。

而如果你搜索 “如何固定 wsl 的 ip”,又会得到一系列复杂的配置方法。

且不说是否有用,但这一系列操作十分令人头疼。

但是,如果你的 windows 是 win11 22H2 以上,情况就不一样了。仅需一个配置文件,就能让 wsl 与 windows 共享 ip。

仅需在Windows中的C:\Users<your_username>目录下创建一个.wslconfig文件,然后在文件中写入如下内容

[experimental]
autoMemoryReclaim=gradual  
networkingMode=mirrored
dnsTunneling=true
firewall=true
autoProxy=true

保存后重启一下 wsl 终端。

三、使用系统代理

由于LangGraph实现以下方法时,需要科学上网

graph.get_graph().draw_mermaid_png()

Windows主机可以实现,但是子系统却无法连接,所以执行代码时报错,如下:

Traceback (most recent call last):
  File "/home/jack/langchain_test/venv/lib/python3.12/site-packages/requests/adapters.py", line 667, in send
    resp = conn.urlopen(
           ^^^^^^^^^^^^^
  File "/home/jack/langchain_test/venv/lib/python3.12/site-packages/urllib3/connectionpool.py", line 841, in urlopen
    retries = retries.increment(
              ^^^^^^^^^^^^^^^^^^
  File "/home/jack/langchain_test/venv/lib/python3.12/site-packages/urllib3/util/retry.py", line 519, in increment
    raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='mermaid.ink', port=443): Max retries exceeded with url: /img/JSV7aW5pdDogeydmbG93Y2hhcnQnOiB7J2N1cnZlJzogJ2xpbmVhcid9fX0lJQpncmFwaCBURDsKCV9fc3RhcnRfXyhbPHA+X19zdGFydF9fPC9wPl0pOjo6Zmlyc3QKCWNoYXRib3QoY2hhdGJvdCkKCV9fZW5kX18oWzxwPl9fZW5kX188L3A+XSk6OjpsYXN0CglfX3N0YXJ0X18gLS0+IGNoYXRib3Q7CgljaGF0Ym90IC0tPiBfX2VuZF9fOwoJY2xhc3NEZWYgZGVmYXVsdCBmaWxsOiNmMmYwZmYsbGluZS1oZWlnaHQ6MS4yCgljbGFzc0RlZiBmaXJzdCBmaWxsLW9wYWNpdHk6MAoJY2xhc3NEZWYgbGFzdCBmaWxsOiNiZmI2ZmMK?type=png&bgColor=!white (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f3043f010d0>: Failed to establish a new connection: [Errno 101] Network is unreachable'))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/jack/langchain_test/langchain_learn/langgraph_tt/langgraph_init.py", line 21, in <module>
    qa_async_png = graph.get_graph().draw_mermaid_png()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jack/langchain_test/venv/lib/python3.12/site-packages/langchain_core/runnables/graph.py", line 630, in draw_mermaid_png
    return draw_mermaid_png(
           ^^^^^^^^^^^^^^^^^
  File "/home/jack/langchain_test/venv/lib/python3.12/site-packages/langchain_core/runnables/graph_mermaid.py", line 214, in draw_mermaid_png
    img_bytes = _render_mermaid_using_api(
                ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jack/langchain_test/venv/lib/python3.12/site-packages/langchain_core/runnables/graph_mermaid.py", line 336, in _render_mermaid_using_api
    response = requests.get(image_url, timeout=10)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jack/langchain_test/venv/lib/python3.12/site-packages/requests/api.py", line 73, in get
    return request("get", url, params=params, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jack/langchain_test/venv/lib/python3.12/site-packages/requests/api.py", line 59, in request
    return session.request(method=method, url=url, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jack/langchain_test/venv/lib/python3.12/site-packages/requests/sessions.py", line 589, in request
    resp = self.send(prep, **send_kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jack/langchain_test/venv/lib/python3.12/site-packages/requests/sessions.py", line 703, in send
    r = adapter.send(request, **kwargs)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jack/langchain_test/venv/lib/python3.12/site-packages/requests/adapters.py", line 700, in send
    raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='mermaid.ink', port=443): Max retries exceeded with url: /img/JSV7aW5pdDogeydmbG93Y2hhcnQnOiB7J2N1cnZlJzogJ2xpbmVhcid9fX0lJQpncmFwaCBURDsKCV9fc3RhcnRfXyhbPHA+X19zdGFydF9fPC9wPl0pOjo6Zmlyc3QKCWNoYXRib3QoY2hhdGJvdCkKCV9fZW5kX18oWzxwPl9fZW5kX188L3A+XSk6OjpsYXN0CglfX3N0YXJ0X18gLS0+IGNoYXRib3Q7CgljaGF0Ym90IC0tPiBfX2VuZF9fOwoJY2xhc3NEZWYgZGVmYXVsdCBmaWxsOiNmMmYwZmYsbGluZS1oZWlnaHQ6MS4yCgljbGFzc0RlZiBmaXJzdCBmaWxsLW9wYWNpdHk6MAoJY2xhc3NEZWYgbGFzdCBmaWxsOiNiZmI2ZmMK?type=png&bgColor=!white (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f3043f010d0>: Failed to establish a new connection: [Errno 101] Network is unreachable'))

1、查看系统IP地址

cat /etc/resolv.conf

# 输出
nameserver 172.19.80.1

2、配置代理

假设你的代理客户端在Windows上运行,并监听端口7890。你可以在Linux子系统中设置环境变量来使用这个代理,在相应的Linux子系统上执行

export ALL_PROXY="http://172.19.80.1:7890"

3、测试

curl -I https://mermaid.ink

正确输出

HTTP/1.1 200 Connection established

HTTP/2 200 
date: Wed, 26 Feb 2025 09:00:00 GMT
content-type: text/html; charset=utf-8
access-control-allow-origin: *
vary: Origin
vary: Accept-Encoding
cf-cache-status: DYNAMIC
report-to: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v4?s=UnBNT0xCLu%2F7PNZfjxcGpPNX08S0duoZdfcchAth%2BnClmzQC3D7HiermCiM1COBz20iLq9HF7Eb4Zo4IFpwYfGScVcZh%2FBgkEyQ8U4ajOEILcKtYXOGdv%2Bdvuz6mlw%3D%3D"}],"group":"cf-nel","max_age":604800}
nel: {"success_fraction":0,"report_to":"cf-nel","max_age":604800}
server: cloudflare
cf-ray: 917ebe0738ef593d-IAD
alt-svc: h3=":443"; ma=86400
server-timing: cfL4;desc="?proto=TCP&rtt=9472&min_rtt=7325&rtt_var=4248&sent=6&recv=10&lost=0&retrans=0&sent_bytes=3425&recv_bytes=747&delivery_rate=269745&cwnd=231&unsent_bytes=0&cid=9f940513285c4823&ts=476&x=0"

再次运行代码,则可以实现图片生成了

要在WSL Linux设置固定IP地址,需要进行以下步骤: 1. 首先,打开WSL Linux终端。 2. 查看当前网络接口。使用ifconfig命令来查看当前网络接口IP地址。例如,输入以下命令:ifconfig eth0 3. 编辑网络配置文件。使用vi或nano等文本编辑器打开网络配置文件。例如,输入以下命令来编辑网络配置文件:sudo vi /etc/network/interfaces 4. 在网络配置文件中,找到对应的网络接口部分。通常情况下,这是以"iface"开头的行,后面跟着网络接口的名称(如eth0)。 5. 在网络接口的配置中,添加以下行来设置固定IP地址: address [IP地址] netmask [子网掩码] gateway [网关地址] 例如,如果要将IP地址设置为192.168.0.100,子网掩码为255.255.255.0,则添加以下行: address 192.168.0.100 netmask 255.255.255.0 gateway [网关地址] 注意:网关地址通常是网络中的路由器IP地址。 6. 保存并关闭文件。在vi编辑器中,按下"Esc"键,然后输入":wq"以保存文件并退出。 7. 重启网络服务。使用以下命令重启网络服务,以应用新的配置:sudo /etc/init.d/networking restart 8. 验证固定IP地址。再次运行ifconfig命令,确保新的固定IP地址已成功应用。 这样,你就成功在WSL Linux设置固定IP地址。确保你选择了一个不会与其他设备或DHCP分配的IP地址冲突的地址,并在网关地址中指定了正确的路由器IP地址。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值