• Windows 无法访问wsl ubuntu 中 docker 的端口


    摘 要

    随着WSL的更新,wsl的增加了许多特性,但也遇到了一些问题:

    • 代理方式的改变
    • 端口访问问题

    由于折腾了很久,所以做一下记录。

    代理问题解决

    解决方法: 去掉wsl中使用脚本配置的代理

    原因:

    关于wsl使用代理, 最常见的方法是使用如下脚本

    hostip=$(cat /etc/resolv.conf |grep -oP '(?<=nameserver\ ).*')
    export https_proxy="http://${hostip}:13579"
    export http_proxy="http://${hostip}:13579"
    export all_proxy="socks5://${hostip}:13579"
    
    • 1
    • 2
    • 3
    • 4

    但是如果在windows目录C:/User/<用户名>/.wslconfig中的配置为

    [wsl2]
    networkingMode=mirrored # 开启镜像网络
    dnsTunneling=true # 开启 DNS Tunneling
    firewall=true # 开启 Windows 防火墙
    autoProxy=true # 开启自动同步代理
    
    [experimental]
    hostAddressLoopback=true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    很有可能出现的情况是无法连接到VPN,原因是/etc/resovf.conf中的nameserver127.0.0.42, 这是由于networkingMode=mirrored后有许多改变,

    总之结果就是无法访问vpn了,如果删除 ~/.bashrc中关于proxy的配置,访问外网

    wget www.google.com
    
    • 1

    是可以正常访问的,这是因为新版wsl有了autoProxy=true功能,能够自动寻找主机的代理。但是不能ping通。[Todo 解决Ping问题, 暂时不解决因为代理可以使用,可能原因是ICMP 协议不走代理]

    在这里插入图片描述

    当然也有可能不能访问,可能是防火墙的问题。解决方法如下,

    端口访问问题

    问题状况是,在wsl中用docker启动了某个应用, 在windows上无法访问,并且确保,windows的防火墙放行了,同时 wsl的防火墙也关闭了,但是无法访问,最终比较关键的是参考WSL 2.0中使用networkingMode=mirrored,解决docker转发和外部设备访问问题

    解决方法:

    • 确保windows 放行了wsl的出站入站规则,也可以使用命令实现,其中的vEthernet (WSL)以具体情况而定,比如我的是vEthernet (Default Switch)

      New-NetFirewallRule -DisplayName "WSL" -Direction Inbound  -InterfaceAlias "vEthernet (WSL)"  -Action Allow
      
      • 1
    • 确保ubuntu关闭了防火墙

      sudo ufw disable
      
      • 1
    • 确保 Hyper-V 防火墙被关闭, 注意:‘{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}’ 复制到Power shell''会消失,需要手动添加,解决方法来源

      Set-NetFirewallHyperVVMSetting -Name{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}-DefaultInboundAction Allow
      
      • 1
    • 关闭docker的防火墙/etc/docker/daemon.json

      {
          "iptables": false
      }
      
      • 1
      • 2
      • 3
  • 相关阅读:
    基于matlab的排队系统仿真
    关于FPGA对 DDR4 (MT40A256M16)的读写控制 3
    设计模式-代理模式
    java 线程池执行流程源码讲解
    UE引擎的UWorld是什么,UWorld与GWorld的关系
    关于云主机root无法从VNC登录处理
    _linux 进程间通信(匿名管道)
    Oracle RAC是啥?
    设置背景图片大小的方法
    starrocks新建clickhouse(jdbc)外部表 查询报错 JDBC result type is [java.math.BigInteger]
  • 原文地址:https://blog.csdn.net/u013671216/article/details/136361737