hvhghv / PocketOpenvpn

一个用c语言编写,可连接openvpn服务端的库,而无需创建tun设备。
MIT License
1 stars 0 forks source link

测试 #1

Open chatonick opened 2 months ago

chatonick commented 2 months ago

这是一个非常有趣的项目。 但是你能添加一些测试和解释吗? 如果项目在套接字上运行并且不应该链接到tun接口,为什么我需要一个虚拟本地地址? 你有没有在真正的ovpn配置上测试过它? 例如,从这里 https://www.vpngate.net/cn/

chatonick commented 2 months ago

就个人而言,我还没有能够重新创建一个单一的工作示例,甚至在本地。 如何查看完整的包日志,如您的客户端屏幕截图所示。ovpn?

chatonick commented 2 months ago

也许你可以从 https://git.packetimpact.net/lvpn/ppyopenvpn 图书馆借点东西. 没有绑定到虚拟地址,它似乎支持udp

hvhghv commented 2 months ago

虚拟本地地址

目前该项目并没有关于dhcp协议的支持,无法动态配置虚拟地址,所以需要手动配置静态虚拟本地地址。

关于客户端屏幕截图所示

这个是需要先运行官方的openvpn程序来查看,并不是该项目生成的。执行这个的目的是运行该项目的occ信息。

关于如何找到静态虚拟本地地址

方法有挺多种,一种是通过运行官方的openvpn程序并查看日志

一种更简单的方法是,先运行运行官方的openvpn程序,之后直接查看本机的ip地址,就能找到虚拟本地地址,之后通过这个 虚拟本地地址来启动该项目

一般来说,在配置了ifconfig-pool-persist选项的服务端中,虚拟本地地址与客户端证书是相绑定。相同的客户端证书 ,一般其虚拟本地地址也是一样的。

是否在其他openvpn配置上执行过

目前我只在以readme.mdopenvpn服务器配置文件为环境运行过,可以运作,但并没有进行过较为严格的测试。

测试和解释

近期我并没有添加测试和解释的计划。短期内,我会将精力放于在添加tcp协议的支持上。目前该项目是采用tcp包转udp包来进行传输的方式来处理tcp包的。但我更希望能通过直接的方式去处理tcp包

其他

我会去参考阅读您所介绍的ppyopenvpn项目,这对我有极佳的参考价值

希望我的回复能帮助到你。

chatonick commented 2 months ago

短期内,我会将精力放于在添加tcp协议的支持上。

我主要感兴趣的是将您的项目用作openvpn客户端,即在没有openvpn服务器运行的设备上。 如果您有时间,请至少检查网站上的一些tcp ovpn配置文件 https://www.vpngate.net/cn/ 。 有允许您使用的相同字段。 与服务器的连接似乎已建立。 但在不到一分钟的时间内,连接中断。 而且,没有日志记录很难理解原因。

hvhghv commented 2 months ago

我更新了项目,添加了日志记录 若需要启动日志记录,需要修改client_config.pyserver_config.pylogging_levellogging.DEBUG 希望这可以帮助你

另外,若启动后在40秒左右断开连接,可能是occ信息不匹配的问题,若是这样,则需要使用官方的openvpn程序来获取occ信息。

chatonick commented 2 months ago

另外,若启动后在40秒左右断开连接,可能是occ信息不匹配的问题,若是这样,则需要使用官方的openvpn程序来获取occ信息。

是的,我已经做了日志记录,握手成功完成 DEBUG - VPN_STATUS_FINISH_TLS_HANDSHARK DEBUG - client_occ= 然后程序就结束了 它确实看起来像occ字符串被错误地创建。 是否可以从ovpn配置文件创建occ字符串?

下面是配置文件

dev tun
proto tcp
remote address port
cipher AES-128-CBC
auth SHA1
resolv-retry infinite
nobind
persist-key
persist-tun
client
verb 3
<ca>
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----

</ca>
<cert>
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----

</cert>
<key>
-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----

</key>

它是否适合组成occ字符串?

hvhghv commented 2 months ago

我认为这需要进一步的调查。 我根据你的配置文件进行测试,并没有出现到达client_occ的地方程序就直接终止的情况。

我测试出来的情况如下:

2024-08-09 00:26:52,039 - INFO - TLS握手成功
2024-08-09 00:26:52,039 - DEBUG - VPN_STATUS_FINISH_TLS_HANDSHARK
2024-08-09 00:26:52,039 - DEBUG - pre_master_secret=6df3d5e9392442e08184925d271d89b74c139fa66783077328243c6e866efdd264772e61f338cf8e215726215ea18e3c
2024-08-09 00:26:52,040 - DEBUG - client_random_1=b9249c512190901aeb886caf206231c23b88c706558cfae5e16d2625650951ad
2024-08-09 00:26:52,040 - DEBUG - client_random_2=1ba8a4fdd073d8f5a072233e75971c33a02e8783984480fa7ffa9ba75b3a109c
2024-08-09 00:26:52,040 - DEBUG - client_occ=b'V4,dev-type tun,link-mtu 1559,tun-mtu 1500,proto TCPv4_CLIENT,cipher AES-128-CBC,auth SHA1,keysize 128,key-method 2,tls-client\x00'
2024-08-09 00:26:52,042 - DEBUG - server_occ=b'V4,dev-type tun,link-mtu 1559,tun-mtu 1500,proto TCPv4_SERVER,auth SHA1,keysize 128,key-method 2,tls-server\x00'
2024-08-09 00:26:52,043 - DEBUG - server_random_1=5e2b871d5a3818f316533636c062b6828caac95db0bf18c81ca9f83f7c307b7d
2024-08-09 00:26:52,043 - DEBUG - server_random_2=336f80ca658b0b2ce47b20b2f6420c2a33968d41b1a2b95c9d9a66a8753f9736
2024-08-09 00:26:52,043 - DEBUG - Cipher 初始化
2024-08-09 00:26:52,044 - DEBUG - cipher_key_length=16
2024-08-09 00:26:52,045 - DEBUG - iv_length=16
2024-08-09 00:26:52,045 - DEBUG - align_length=16
2024-08-09 00:26:52,045 - DEBUG - hmac_key_length=20
2024-08-09 00:26:52,045 - DEBUG - hmac_msg_length=20
2024-08-09 00:26:52,046 - DEBUG - pre_master_secret=6df3d5e9392442e08184925d271d89b74c139fa66783077328243c6e866efdd264772e61f338cf8e215726215ea18e3c
2024-08-09 00:26:52,046 - DEBUG - master_secret=2aa5ce1968b174b4385b86f5ed31327c380ca0e7e55f1021fc441d536a3909211fc0b9ce82c4b9ce9c137a603deaa777
2024-08-09 00:26:52,046 - DEBUG - key=fb958b9e76a3428113f8798f36b28c3da04c9c898f28f308bbd4e819e97f13855b54992b97c0913026a90f5a126f07a598daf32095bfe83582f117a4c2e943e42f6c069d6bd85983ad2fb646c95183149b5e3f9fc3b766373a3b73be0b572817751bfa76056bf1057991b124788a23ced2c6066434d4955d2a961a60fc7ee74e1df04d1ec717b1001301ac1f955587047662851ce93dee43f25fb88c65b6de529a3ec3914bdde81928ef676926b01a5846a1367f5baad66dfd7460162a93e90d0ee590dcc288f99d3d1411aa7d5ef934ad25820cc2db0422abb9efcfc13fe1323023d52ff70fdeef7fc9c8f17bdb35e782a238cc2ab43f53888eb0e6df9bbeb7
2024-08-09 00:26:52,047 - DEBUG - Encrypto_Cipher_Key=fb958b9e76a3428113f8798f36b28c3d
2024-08-09 00:26:52,047 - DEBUG - Encrypto_Hmac_Key=2f6c069d6bd85983ad2fb646c95183149b5e3f9f
2024-08-09 00:26:52,047 - DEBUG - Decrypto_Cipher_Key=1df04d1ec717b1001301ac1f95558704
2024-08-09 00:26:52,047 - DEBUG - Decrypto_Hmac_Key=0ee590dcc288f99d3d1411aa7d5ef934ad25820c

即使occ不匹配,程序还是会运行一段时间,输出密钥的信息后再退出

如果可以的话,希望我可以得知你的服务端配置文件,让我更进一步的调查

这是我测试的服务端配置文件

port 1194
proto tcp
dev tun
topology subnet
server 10.8.1.0 255.255.255.0
client-to-client
cipher AES-128-CBC
data-ciphers AES-128-CBC

auth SHA1
verb 6
reneg-sec 9600

目前我猜想有三种

如果是已经生成了密钥信息,且运行到了SimpleForwardClient.STATUS_PRE_INIT后退出,则可能是

我更新了该项目,在认证失败时可以输出失败信息recv_tls_text in error status,可以下载新项目进行测试

另外,在你的配置文件中缺少了data-ciphers AES-128-CBC选项,这是一个必要选项。我猜测你服务端配置可能也缺少了这个选项。

补充:

若生成匹配的occ字符串,比较复杂的方法是查看官方openvpn程序运行日志。简单的办法就是根据server-occ进行修改得到client-occ

例如:server_occ为 V4,dev-type tun,link-mtu 1559,tun-mtu 1500,proto TCPv4_SERVER,cipher AES-128-CBC,auth SHA1,keysize 128,key-method 2,tls-server

则:client_occ为 V4,dev-type tun,link-mtu 1559,tun-mtu 1500,proto TCPv4_CLIENT,cipher AES-128-CBC,auth SHA1,keysize 128,key-method 2,tls-client

如果可以,可以提供server-occ字符串,让我帮助你进行修改

chatonick commented 2 months ago

如果可以的话,希望我可以得知你的服务端配置文件,让我更进一步的调查

dev tun
proto tcp
remote 27.116.61.69 1631
cipher AES-128-CBC
auth SHA1
resolv-retry infinite
nobind
persist-key
persist-tun
client
verb 3

<ca>
-----BEGIN CERTIFICATE-----
MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4
WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu
ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY
MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc
h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+
0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U
A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW
T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH
B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC
B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv
KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn
OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn
jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw
qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI
rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq
hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL
ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ
3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK
NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5
ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur
TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC
jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc
oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq
4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA
mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d
emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=
-----END CERTIFICATE-----

</ca>

<cert>
-----BEGIN CERTIFICATE-----
MIICxjCCAa4CAQAwDQYJKoZIhvcNAQEFBQAwKTEaMBgGA1UEAxMRVlBOR2F0ZUNs
aWVudENlcnQxCzAJBgNVBAYTAkpQMB4XDTEzMDIxMTAzNDk0OVoXDTM3MDExOTAz
MTQwN1owKTEaMBgGA1UEAxMRVlBOR2F0ZUNsaWVudENlcnQxCzAJBgNVBAYTAkpQ
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5h2lgQQYUjwoKYJbzVZA
5VcIGd5otPc/qZRMt0KItCFA0s9RwReNVa9fDRFLRBhcITOlv3FBcW3E8h1Us7RD
4W8GmJe8zapJnLsD39OSMRCzZJnczW4OCH1PZRZWKqDtjlNca9AF8a65jTmlDxCQ
CjntLIWk5OLLVkFt9/tScc1GDtci55ofhaNAYMPiH7V8+1g66pGHXAoWK6AQVH67
XCKJnGB5nlQ+HsMYPV/O49Ld91ZN/2tHkcaLLyNtywxVPRSsRh480jju0fcCsv6h
p/0yXnTB//mWutBGpdUlIbwiITbAmrsbYnjigRvnPqX1RNJUbi9Fp6C2c/HIFJGD
ywIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQChO5hgcw/4oWfoEFLu9kBa1B//kxH8
hQkChVNn8BRC7Y0URQitPl3DKEed9URBDdg2KOAz77bb6ENPiliD+a38UJHIRMqe
UBHhllOHIzvDhHFbaovALBQceeBzdkQxsKQESKmQmR832950UCovoyRB61UyAV7h
+mZhYPGRKXKSJI6s0Egg/Cri+Cwk4bjJfrb5hVse11yh4D9MHhwSfCOH+0z4hPUT
Fku7dGavURO5SVxMn/sL6En5D+oSeXkadHpDs+Airym2YHh15h0+jPSOoR6yiVp/
6zZeZkrN43kuS73KpKDFjfFPh8t4r1gOIjttkNcQqBccusnplQ7HJpsk
-----END CERTIFICATE-----

</cert>

<key>
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA5h2lgQQYUjwoKYJbzVZA5VcIGd5otPc/qZRMt0KItCFA0s9R
wReNVa9fDRFLRBhcITOlv3FBcW3E8h1Us7RD4W8GmJe8zapJnLsD39OSMRCzZJnc
zW4OCH1PZRZWKqDtjlNca9AF8a65jTmlDxCQCjntLIWk5OLLVkFt9/tScc1GDtci
55ofhaNAYMPiH7V8+1g66pGHXAoWK6AQVH67XCKJnGB5nlQ+HsMYPV/O49Ld91ZN
/2tHkcaLLyNtywxVPRSsRh480jju0fcCsv6hp/0yXnTB//mWutBGpdUlIbwiITbA
mrsbYnjigRvnPqX1RNJUbi9Fp6C2c/HIFJGDywIDAQABAoIBAERV7X5AvxA8uRiK
k8SIpsD0dX1pJOMIwakUVyvc4EfN0DhKRNb4rYoSiEGTLyzLpyBc/A28Dlkm5eOY
fjzXfYkGtYi/Ftxkg3O9vcrMQ4+6i+uGHaIL2rL+s4MrfO8v1xv6+Wky33EEGCou
QiwVGRFQXnRoQ62NBCFbUNLhmXwdj1akZzLU4p5R4zA3QhdxwEIatVLt0+7owLQ3
lP8sfXhppPOXjTqMD4QkYwzPAa8/zF7acn4kryrUP7Q6PAfd0zEVqNy9ZCZ9ffho
zXedFj486IFoc5gnTp2N6jsnVj4LCGIhlVHlYGozKKFqJcQVGsHCqq1oz2zjW6LS
oRYIHgECgYEA8zZrkCwNYSXJuODJ3m/hOLVxcxgJuwXoiErWd0E42vPanjjVMhnt
KY5l8qGMJ6FhK9LYx2qCrf/E0XtUAZ2wVq3ORTyGnsMWre9tLYs55X+ZN10Tc75z
4hacbU0hqKN1HiDmsMRY3/2NaZHoy7MKnwJJBaG48l9CCTlVwMHocIECgYEA8jby
dGjxTH+6XHWNizb5SRbZxAnyEeJeRwTMh0gGzwGPpH/sZYGzyu0SySXWCnZh3Rgq
5uLlNxtrXrljZlyi2nQdQgsq2YrWUs0+zgU+22uQsZpSAftmhVrtvet6MjVjbByY
DADciEVUdJYIXk+qnFUJyeroLIkTj7WYKZ6RjksCgYBoCFIwRDeg42oK89RFmnOr
LymNAq4+2oMhsWlVb4ejWIWeAk9nc+GXUfrXszRhS01mUnU5r5ygUvRcarV/T3U7
TnMZ+I7Y4DgWRIDd51znhxIBtYV5j/C/t85HjqOkH+8b6RTkbchaX3mau7fpUfds
Fq0nhIq42fhEO8srfYYwgQKBgQCyhi1N/8taRwpk+3/IDEzQwjbfdzUkWWSDk9Xs
H/pkuRHWfTMP3flWqEYgW/LW40peW2HDq5imdV8+AgZxe/XMbaji9Lgwf1RY005n
KxaZQz7yqHupWlLGF68DPHxkZVVSagDnV/sztWX6SFsCqFVnxIXifXGC4cW5Nm9g
va8q4QKBgQCEhLVeUfdwKvkZ94g/GFz731Z2hrdVhgMZaU/u6t0V95+YezPNCQZB
wmE9Mmlbq1emDeROivjCfoGhR3kZXW1pTKlLh6ZMUQUOpptdXva8XxfoqQwa3enA
M7muBbF0XN7VO80iJPv+PmIZdEIAkpwKfi201YB+BafCIuGxIF50Vg==
-----END RSA PRIVATE KEY-----

</key>

另外,在你的配置文件中缺少了data-ciphers AES-128-CBC选项,这是一个必要选项。我猜测你服务端配置可能也缺少了这个选项。

是的,服务器不支持它。 仅配置中指定的选项。 添加对这种配置的支持是否非常困难?

hvhghv commented 2 months ago

首先,这个是客户端选项的配置文件,并非服务器的,我希望能得知服务器的配置文件

对于data-ciphers 选项,若不添加此选项,会默认为aem-gcm-* 的加密方式,目前是不支持的。也许我近期可以研究下。

另外,目前你的配置文件中暴露了一些证书等敏感信息。若确实如此,建议尽快吊销该证书。若这些东西仅是测试用的,则可以无视。

chatonick commented 2 months ago

首先,这个是客户端选项的配置文件,并非服务器的,我希望能得知服务器的配置文件

无法访问服务器配置。 您只能根据客户端配置对其进行评估。 为了让客户端工作,了解服务器配置通常如此重要吗? 但可能服务器使用此配置: https://github.com/SoftEtherVPN/SoftEtherVPN/blob/master/src/bin/hamcore/openvpn_sample.ovpn

对于data-ciphers 选项,若不添加此选项,会默认为aem-gcm-* 的加密方式,目前是不支持的。

这可能就是问题所在。

若这些东西仅是测试用的,则可以无视。

这是一个公共服务器。