V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fever
V2EX  ›  宽带症候群

有没有熟悉 openvpn 的同学给看看

  •  
  •   fever · 233 天前 · 4863 次点击
    这是一个创建于 233 天前的主题,其中的信息可能已经有所发展或是发生改变。
    openvpn 两边 service 都启动起来了 连接不成功,或者说一连上就被重置了,似乎是拒绝了
    服务端的转发有开 /etc/sysctl.conf
    服务端的端口 51199 是正常开放的
    看日志 Connection reset, restarting [-1] 这个错误也找不到相关解释


    服务端配置:
    proto tcp-server
    dev tun
    port 51199
    ifconfig 10.10.4.1 10.10.4.2
    tls-server
    remote-cert-tls client
    tls-auth /etc/openvpn/server/ta.key 0
    ca /etc/openvpn/server/ca.crt
    cert /etc/openvpn/server/server.crt
    key /etc/openvpn/server/server.key
    dh /etc/openvpn/server/dh2048.pem
    cipher AES-128-CBC
    comp-lzo adaptive
    push "comp-lzo adaptive"
    persist-tun
    persist-key
    verb 4
    keepalive 10 60
    user openvpn
    group openvpn
    log /var/log/openvpn_test.log
    log-append /var/log/openvpn_test.log
    route 192.168.144.0 255.255.248.0 vpn_gateway


    客户端配置:
    proto tcp-client
    dev tun
    remote x.x.x.x 51199
    ifconfig 10.10.4.2 10.10.4.1
    tls-client
    remote-cert-tls server
    tls-auth /etc/openvpn/server/ta.key 1
    ca /etc/openvpn/server/ca.crt
    cert /etc/openvpn/server/server.crt
    key /etc/openvpn/server/server.key
    dh /etc/openvpn/server/dh2048.pem
    cipher AES-128-CBC
    comp-lzo adaptive
    persist-tun
    persist-key
    verb 4
    keepalive 10 60
    user openvpn
    group openvpn
    log /var/log/openvpn_us.log
    log-append /var/log/openvpn_us.log
    route 192.168.40.0 255.255.248.0 vpn_gateway



    客户端日志:
    2024-04-02 19:53:17 us=761923 Restart pause, 300 second(s)
    2024-04-02 19:58:17 us=762021 Re-using SSL/TLS context
    2024-04-02 19:58:17 us=762156 Outgoing Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
    2024-04-02 19:58:17 us=762173 Incoming Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
    2024-04-02 19:58:17 us=762235 Control Channel MTU parms [ L:1559 D:1182 EF:68 EB:0 ET:0 EL:3 ]
    2024-04-02 19:58:17 us=762253 Preserving previous TUN/TAP instance: tun4
    2024-04-02 19:58:17 us=762271 Data Channel MTU parms [ L:1559 D:1450 EF:59 EB:395 ET:0 EL:3 ]
    2024-04-02 19:58:17 us=762307 Local Options String (VER=V4): 'V4,dev-type tun,link-mtu 1559,tun-mtu 1500,proto TCPv4_CLIENT,ifconfig 10.10.4.1 10.10.4.2,keydir 1,cipher AES-128-CBC,auth SHA1,keysize 128,tls-auth,key-method 2,tls-client'
    2024-04-02 19:58:17 us=762319 Expected Remote Options String (VER=V4): 'V4,dev-type tun,link-mtu 1559,tun-mtu 1500,proto TCPv4_SERVER,ifconfig 10.10.4.2 10.10.4.1,keydir 0,cipher AES-128-CBC,auth SHA1,keysize 128,tls-auth,key-method 2,tls-server'
    2024-04-02 19:58:17 us=762331 TCP/UDP: Preserving recently used remote address: [AF_INET]xxxx:51199
    2024-04-02 19:58:17 us=762362 Socket Buffers: R=[131072->131072] S=[16384->16384]
    2024-04-02 19:58:17 us=762371 Attempting to establish TCP connection with [AF_INET]xxxx:51199 [nonblock]
    2024-04-02 19:58:17 us=937632 TCP connection established with [AF_INET]xxxx:51199
    2024-04-02 19:58:17 us=937679 TCP_CLIENT link local: (not bound)
    2024-04-02 19:58:17 us=937689 TCP_CLIENT link remote: [AF_INET]xxxx:51199
    2024-04-02 19:58:18 us=791085 Connection reset, restarting [-1]
    2024-04-02 19:58:18 us=791173 TCP/UDP: Closing socket
    2024-04-02 19:58:18 us=791200 SIGUSR1[soft,connection-reset] received, process restarting
    2024-04-02 19:58:18 us=791215 Restart pause, 300 second(s)


    服务端日志
    2024-04-02 19:58:18 us=709684 TCP connection established with [AF_INET]x.x.x.x:37360
    2024-04-02 19:58:18 us=709738 TCPv4_SERVER link local (bound): [AF_INET][undef]:51199
    2024-04-02 19:58:18 us=709745 TCPv4_SERVER link remote: [AF_INET]x.x.x.x:37360
    2024-04-02 19:58:18 us=709757 Server poll timeout, restarting
    2024-04-02 19:58:18 us=709799 TCP/UDP: Closing socket
    2024-04-02 19:58:18 us=709860 SIGUSR1[soft,server_poll] received, process restarting
    2024-04-02 19:58:18 us=709880 net_route_v4_best_gw query: dst 0.0.0.0
    2024-04-02 19:58:18 us=709965 net_route_v4_best_gw result: via 192.168.40.253 dev eth0
    2024-04-02 19:58:18 us=709996 Re-using SSL/TLS context
    2024-04-02 19:58:18 us=710069 Outgoing Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
    2024-04-02 19:58:18 us=710081 Incoming Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
    2024-04-02 19:58:18 us=710127 Control Channel MTU parms [ L:1559 D:1182 EF:68 EB:0 ET:0 EL:3 ]
    2024-04-02 19:58:18 us=710194 Preserving previous TUN/TAP instance: tun0
    2024-04-02 19:58:18 us=710205 Data Channel MTU parms [ L:1559 D:1450 EF:59 EB:395 ET:0 EL:3 ]
    2024-04-02 19:58:18 us=710224 Local Options String (VER=V4): 'V4,dev-type tun,link-mtu 1559,tun-mtu 1500,proto TCPv4_SERVER,ifconfig 10.10.4.2 10.10.4.1,keydir 0,cipher AES-128-CBC,auth SHA1,keysize 128,tls-auth,key-method 2,tls-server'
    2024-04-02 19:58:18 us=710229 Expected Remote Options String (VER=V4): 'V4,dev-type tun,link-mtu 1559,tun-mtu 1500,proto TCPv4_CLIENT,ifconfig 10.10.4.1 10.10.4.2,keydir 1,cipher AES-128-CBC,auth SHA1,keysize 128,tls-auth,key-method 2,tls-client'
    2024-04-02 19:58:18 us=710282 Could not determine IPv4/IPv6 protocol. Using AF_INET
    2024-04-02 19:58:18 us=710300 Socket Buffers: R=[131072->131072] S=[16384->16384]
    2024-04-02 19:58:18 us=710314 Listening for incoming TCP connection on [AF_INET][undef]:51199
    第 1 条附言  ·  233 天前
    同样的配置
    如果用 secret static.key 的方式就能正常连接成功 也不会被重置掉
    其他一样 仅把 tls 相关的验证方式 改成 static 这种方式就正常

    但是因为一些原因,有些客户端已经不支持这种连接方式了,所以还是需要用上面 tls 的方式连接


    proto tcp-server
    dev tun
    port 51199
    ifconfig 10.10.4.1 10.10.4.2

    secret /etc/openvpn/static.key

    cipher AES-128-CBC
    comp-lzo adaptive
    push "comp-lzo adaptive"
    persist-tun
    persist-key
    verb 4
    keepalive 10 60
    user openvpn
    group openvpn
    log /var/log/openvpn_test.log
    log-append /var/log/openvpn_test.log
    route 192.168.144.0 255.255.248.0 vpn_gateway


    proto tcp-client
    dev tun
    remote x.x.x.x 51199
    ifconfig 10.10.4.2 10.10.4.1

    secret /etc/openvpn/static.key

    cipher AES-128-CBC
    comp-lzo adaptive
    persist-tun
    persist-key
    verb 4
    keepalive 10 60
    user openvpn
    group openvpn
    log /var/log/openvpn_us.log
    log-append /var/log/openvpn_us.log
    route 192.168.40.0 255.255.248.0 vpn_gateway
    第 2 条附言  ·  232 天前
    感谢 defunct9 老哥,还有大家的帮助
    已解决,证书问题
    之前因为一直以为日志显示连成功过,就没往这方面想
    57 条回复    2024-04-04 15:22:08 +08:00
    fever
        1
    fever  
    OP
       233 天前
    @defunct9 在线求助老哥,感谢感谢
    Jamy
        2
    Jamy  
       233 天前   ❤️ 1
    如果是国内连国外的话,请加上能穿墙的代理
    wws2023
        3
    wws2023  
       233 天前   ❤️ 1
    楼上正解,你没一个能转发的 怎么直连
    fever
        4
    fever  
    OP
       233 天前
    @Jamy #2
    @wws2023 #3 同样配置只是改变验证方式 换成静态密钥( static-key ),是能连接成功的.只是因为一定要用 tls 验证方式,这个验证方式和翻墙也有关系的吗
    fever
        5
    fever  
    OP
       233 天前
    @wws2023 #3
    @Jamy #2 有附加 append
    mightybruce
        6
    mightybruce  
       233 天前   ❤️ 2
    改用 ssl-vpn 吧,openvpn 有一定阻挡概率的。
    建议 softetether vpn , 这个比较稳定。
    totoro52
        7
    totoro52  
       233 天前   ❤️ 1
    GFW 能百分之 99 识别出 openvpn 并且阻断握手,你最好别在尝试链接了, 秒封 IP 的,不要用 openvpn 这种古老的东西去翻墙了,如果不是翻墙就不要用国外机器
    fever
        8
    fever  
    OP
       233 天前
    @totoro52 #7 不是翻墙 就是为了 把不同区域的服务器 打通 国内和国外
    JensenQian
        9
    JensenQian  
       233 天前 via Android   ❤️ 1
    @fever 在大墙眼里,这和爬墙没区别,谁知道你干啥
    totoro52
        10
    totoro52  
       233 天前
    @fever #8 那也不要用 openvpn 替代 openvpn 的东西很多的, 这东西已经被 GFW 分析得彻彻底底的了,如果你还是想要用它,就像楼上所说的, 你可以套一个加密的代理去作为前置
    shuimugan
        11
    shuimugan  
       233 天前   ❤️ 1
    最近刚好在折腾这个,直连外面 2 周没啥问题,用 https://github.com/dockovpn/dockovpn 这个搭建的,如果是 docker compose 运行结合 https://github.com/dockovpn/dockovpn/issues/221 这个就搞定了,客户端也是 tls 。
    有一说一 openvpn 真的老旧又落后,也就是为了直接在华硕的路由器上使用才选的,平时我都用 wireguard 。
    shakeit
        12
    shakeit  
       233 天前   ❤️ 1
    这个问题好像遇到过,后来应该是改的配置
    route-nopull
    route 192.168.255.0 255.255.255.0 vpn_gateway
    当时是为了访问某些不具备外网 IP 的机器,不过后来像楼上老哥一样改用 docker 部署了
    Remember
        13
    Remember  
       233 天前   ❤️ 1
    openvpn 没有任何价值了,无论是不是为了翻墙,都会被墙识别出来秒封。
    busier
        14
    busier  
       232 天前 via iPhone   ❤️ 1
    在我们地区,手机联通卡,出门在外通过 OpenVPN 连接回家里电信宽带,连几次后,就会被阻断。阻断时,换联通卡+wg 就没问题,或者立马切回电信手机卡+openvpn 也没问题

    可见即使在大陆内网,openvpn 也可能被阻断。
    newlifeinsc
        15
    newlifeinsc  
       232 天前   ❤️ 1
    把你 server 和 client 的版本列出来下呢。 我遇到过一个类似情况,用 linux 的 client 连上去后马上又 Connection reset, restarting 。 但 windows 的 client 就是 ok 的。后来最终排查到是 linux 的 client 版本过高,server 版本过低。client 已经不支持 server 用的加密方式了。
    defunct9
        16
    defunct9  
       232 天前
    @fever 开 ssh ,让我上去看看
    defunct9
        17
    defunct9  
       232 天前   ❤️ 1
    @fever “不是翻墙 就是为了 把不同区域的服务器 打通 国内和国外”。刚搞了一个,把阿里云的国内和日本打通,不用它的企业网。用 ipsec
    ik
        18
    ik  
       232 天前 via iPhone   ❤️ 1
    没记错的话 openvpn 可以前置代理。 或者研究一下 xray 的"任意门"做端口转发, 可以实现的方式就很多了。
    参考这个 https://www.40huo.cn/blog/wireguard-over-vless.html
    YaD2x
        19
    YaD2x  
       232 天前   ❤️ 1
    借楼问一个 openvpn 问题,困扰我多天了。服务端部署在阿里云,有个客户端在 aws , 现在 aws ping 阿里云服务端可通, 从阿里云 ping aws 的私网 ip 不通。尝试添加了各种路由都不通。aws 的 ip 是 172.31.38.233/20 vpn 服务端 ip 是 172.24.135.95/20 vip 是 net 10.8.0.1 peer 10.8.0.2/32 scope global tun0 我之前发过一条帖子,但是没人理我哈哈哈。https://www.v2ex.com/t/1025209#reply0
    YaD2x
        20
    YaD2x  
       232 天前
    @defunct9 必须要用这个 ipsec 吗 我想 aws 和阿里云的通信 应该怎么做呀
    mm2x
        21
    mm2x  
       232 天前   ❤️ 1
    @Remember 为啥没有价值呢?不比 PPTP 和 L2TP 好用安全多了。OPENVPN 在组网方面还是非常不错的吧?
    fever
        22
    fever  
    OP
       232 天前
    @newlifeinsc #15 都是 Linux 来着 2.5.5
    chronos
        23
    chronos  
       232 天前   ❤️ 1
    要不你尝试一下 tinc ,我用这个连接国内外很稳定,用了好多年了。
    YaD2x
        24
    YaD2x  
       232 天前
    @ik 我就过了一下代理,不然直连端口一会儿就封了
    fever
        25
    fever  
    OP
       232 天前
    @mm2x #21 对 感觉还是挺方便的
    @defunct9 #17 因为好个不同地方一起组网 主要路由支持的有限 只有 openvpn 和一个 pptp
    defunct9
        26
    defunct9  
       232 天前
    @YaD2x ,是要控制整段路由。公司到苹果的路由,必须走阿里到 ipsec 上海的一条专门线路。
    fever
        27
    fever  
    OP
       232 天前
    @defunct9 #26 哥怎么给你 ssh 绿色吗还是 tg
    defunct9
        28
    defunct9  
       232 天前
    @fever wx:defunct
    fever
        29
    fever  
    OP
       232 天前
    @YaD2x #19 你那个贴子啥都没说啊 你可以配置文件发出来看看 我两边都 ping 通过 我现在的问题是换了 tls 有问题
    newlifeinsc
        30
    newlifeinsc  
       232 天前
    @fever #22 那应该是和我的状况不一样, 我用的 openvpn3 的 client 去连的。相同的 client 配置,你有用其他平台的 client 去试吗
    fever
        31
    fever  
    OP
       232 天前
    @newlifeinsc #30 并没有 我是两边都是 linux 不同区域的
    YaD2x
        32
    YaD2x  
       232 天前
    @fever 日 记错了,忘了帖子内容被我删了
    YaD2x
        33
    YaD2x  
       232 天前
    @defunct9 我也加你 请教你一下
    ExplodingFKL
        34
    ExplodingFKL  
       232 天前   ❤️ 1
    openvpn 太复杂了,加上大量的协议协商,这玩意的握手特征特别明显,阻断是常有的事情 ,如果是组网的话可以用 nebula 、n2n 、wireguard 啥的,虽然出国 UDP 日常拉胯 ...
    nkloveni
        35
    nkloveni  
       232 天前   ❤️ 1
    @totoro52 他这种预共享 key 的 fq 是没问题的,没啥特征的
    fever
        36
    fever  
    OP
       232 天前
    @nkloveni #35 说的预共享是我 append 里面的 static 共享密钥方式吗 ?意思是下面的 static 方式是没问题 ,但是用 tls 不行,就是因为 tls 有特征被阻断吗
    pagxir
        37
    pagxir  
       232 天前 via Android   ❤️ 1
    组网用 fou ipsec ipip 都可以吧。用 VPN 是为了安全。
    ranaanna
        38
    ranaanna  
       232 天前   ❤️ 1
    可能有一个错误:客户端的 cert 和 key ,不应该和服务端的是一样的,但是这里从文件名字来看,可能是一样的。简单的 static key 已经过时了。tls-auth hangshake 很多年前也被封了,但是 OP 只需要额外配置一个 tls-crypt ,给 tls-auth 加个密,就能顺利用到当下
    ranaanna
        39
    ranaanna  
       232 天前
    抱歉前面写错了,tls-auth 和 tls-crypt 是相似的东西,被封的是 tls handshake ,所以需要额外配置 tls-auth 或 tls-crypt
    ranaanna
        40
    ranaanna  
       232 天前   ❤️ 1
    再次抱歉看 OP 配置是有 tls-auth 的(但是不需要 0 1 ,因为不是点对点),所以可能的问题是两端用了相同的 cert 和 key
    nkloveni
        41
    nkloveni  
       232 天前
    @fever static 点对点肯定没问题的,fq 也没特征,不会被封,放 80 或 443 还能享受 QoS 的优势。但你那个日志比较奇怪,server 压根没收到请求。但换成 static 是可以的对吧,网络连通性也没问题,我也搞不懂
    nkloveni
        42
    nkloveni  
       232 天前   ❤️ 1
    @ranaanna static 没过时啊,要是点对点的话,用 static 非常合适。pki 是给 cs 架构的,那个跨 q 是有问题的
    defunct9
        43
    defunct9  
       232 天前   ❤️ 1
    搞定,结案
    fever
        44
    fever  
    OP
       232 天前
    @ranaanna #40 嗯 有老哥帮看了是证书问题 哈哈
    @nkloveni #41 对 static 没问题 老哥帮看了 是我证书有问题 之前我是看日志 连上了,以为证书不会有问题
    pki 给 cs 架构 是啥意思啊 就说 tls 验证这一套吗
    ranaanna
        45
    ranaanna  
       232 天前   ❤️ 1
    @nkloveni 当前版本( 2.6 )还有这个选项,但是会有警告提示。2.7 版本是错误提示,但是可用--allow-deprecated-insecure-static-crypto 跳过。将来的 2.8 版本没有这个选项。pki ca 是有些复杂,但是好在有 easy-rsa ,跨墙有问题,但是这么多年用下来,似乎只要配置 tls-auth ,就没有问题。
    nkloveni
        46
    nkloveni  
       232 天前
    @ranaanna 我去,果然是,感谢感谢~~ 坚决不升级了...
    xdzhang
        47
    xdzhang  
       232 天前
    我用 softether ,比 openvpn 配置方便。
    fever
        48
    fever  
    OP
       232 天前
    @ranaanna #45 请教下你们说的 pki ca 架构具体是啥啊 easy-rsa 不是用来生成证书的工具吗- -
    ranaanna
        49
    ranaanna  
       232 天前   ❤️ 1
    @fever PKI 可以说是建立 openvpn 配置的第一步。PKI public key infrastructure 公钥基础设施是指服务器和各个客户端都有各自的证书 cert 和私钥 key ,用来证明各自的身份; CA certificate authority 是指主颁发机构,本质上是一组证书和私钥,用来签署服务器和客户端的证书,保证所有的身份都是真实、唯一和可靠的。通常使用外部 PKI 需要付出一定的代价,所以 openvpn 提供了 easy-rsa ,用来部署自签的 CA ,给所有服务器和客户端颁发证书。所以 OP 认为 easy-ras 是生成证书的工具,理解也并没有错
    fever
        50
    fever  
    OP
       232 天前
    @ranaanna #49 抱歉,再请教下,除了 pki 架构,是还有其他架构吗, static 的 key 也是用工具生成的吧
    fever
        51
    fever  
    OP
       232 天前
    @ranaanna #49 每次都是照着网上照做 感觉没看到很详细讲这些的 该用哪个适合用哪个,所以问多点
    150530
        52
    150530  
       232 天前
    @fever 异地组网解决方案一般是 WireGuard 吧,或者 zerotier 和 tailscale 带 p2p 穿透的,用 openvpn 不太合适,建议了解一下 WireGuard
    ranaanna
        53
    ranaanna  
       232 天前
    @ranaanna 实际上无非是身份验证方法而已。static keys 是用双方都预先知道的密钥来证明双方的身份是真实可靠的,这种方法在当今已经不再认为是足够好和安全了。所以一般用的是基于证书的身份验证,openvpn 的通常方法是用 easy-rsa ,生成自签 CA ,并在此基础上创建和管理所需的证书,从而产生一个 PKI ,形成一个相互信任的网络。这个小小的 PKI 仅仅是一个私有 PKI ,只在一个很小的范围内提供身份验证。当然,也可以使用公共 PKI (比如 Let's Encrypt )提供的证书,但是这需要提供包括 common name 等信息,需要每个终端都要有独立域名,大多数公共 PKI 都是收费的等等,实际上完全没有必要。关于其他的“架构”,openvpn 还提供了用户名/密码的验证方式,但是一般是用在证书+用户名/密码的双重验证,单独的用户名/密码验证可以用--client-cert-not-required 强制,但是还是需要服务器的 ca
    huihuilang
        54
    huihuilang  
       232 天前 via Android
    我司现在用 cisco 的 anyconnect ,连接国外总部服务器稳如狗
    ttvast
        55
    ttvast  
       232 天前
    @150530 wireguard 不适合一对多架构
    AaIT
        56
    AaIT  
       232 天前
    @fever 组网用 Tailscale 就行了,功能强大稳定省心+免费 100 台设备,记得打开 UDP 41641 端口
    erfesq
        57
    erfesq  
       231 天前 via Android
    openvpn 国内用还好,可以家里软路由,用 op 回去
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1073 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 19:21 · PVG 03:21 · LAX 11:21 · JFK 14:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.