韩三岁

Windows搭建OpenVPN访问内网资源,并使用帐号密码登录


下载OpenVPN客户端

1、下载地址:https://openvpn.net/index.php/open-source/downloads.html
2、选择Windows版本下载
3、安装的时候,务必勾选EasyRSA,否则接下来无法生成证书文件

4、安装完毕后打开默认安装路径


5、进入easy-rsa(安装的时候没有勾选,是没有该目录的)

6、输入cmd,进入命令模式


生成需要使用的服务器证书

1、编辑vars.bat.sample,配置模版


2、初始化,init-config.bat


3、vars.bat,(设置相应的局部环境变量,就是我们在vars.bat.sample文件中设置的内容)


4、clean-all.bat(相关设置和清理工作,如果提示找不到指定路径,可以重新init和vars)


5、创建CA根证书,build-ca.bat


6、创建服务器端证书,build-key-server.bat server(自己定义,这个名字就是产生文件的名字,需要和下面的Comman Name保持一直)


7、创建迪菲·赫尔曼密钥:build-dh.bat(直接执行,如果KEY_SIZE是4096,需要等待较长时间)


8、全部创建完毕后,在C:\Program Files\OpenVPN\easy-rsa\keys目录下,会有以下文件



配置验证文件和用户(参考csdn Hslim代码,这里只给出了源码,exe文件需要自己生成)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 1024

int checkpsw(char *username, char *password)
{
    FILE *f;
    char user[MAX + 2], pass[MAX + 2], active[MAX + 2];
    /*  printf(“%s,%s\n”,username,password); */
    if (!(f = fopen("userpwd", "r")))
    {
        perror("Open PASSWORD file error");
        printf("The password file not found\n");
        return -1;
    }
    while (!feof(f))
    {
        fscanf(f, "%s %s %s\n", user, pass, active);
        //printf("user:%s pass:%s active:%s\n",user, pass, active); 
        if (strcmp(username, user)==0 && strcmp(password, pass)==0 && strcmp(active, "1")==0)
        {
            fclose(f);
            return 0 ;
            //验证通过应该返回0;
        }
    }
    fclose(f);
    return 1;
}

int main()
{
    int status;
    /*  printf(“%s,%s”,getenv(“USERNAME”),getenv(“PASSWORD”)); */
    status = checkpsw(getenv("USERNAME"), getenv("PASSWORD"));
    return status;
}


设置用户名密码(按照上述代码,文件名应该为userpwd

用户名           密码            是否启用(0停用/1启用) 中间空格
Username      Password         Enable


栗子(经过测试,帐号不能加 _ 之类特殊符号)

zhanghao mima 1


将上述文件,放置到config目录下


配置服务端

port 1194 #对外端口,需要防火墙通过
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
auth-user-pass-verify checkpsd.exe via-env #帐号密码验证的文件
client-cert-not-required
username-as-common-name
script-security 3
dh dh1024.pem
server 10.88.99.0 255.255.255.0 #客户端连接后,获取的地址为10.88.99.x
ifconfig-pool-persist ipp.txt
push "route 192.168.1.0 255.255.255.0" #给客户端增加192.168.1.0的路由,用于访问内网资源
push "route 10.88.99.0 255.255.255.0"  #给客户端增加10.88.99.0的路由,用于访问内网资源
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 114.114.114.114"
push "dhcp-option DNS 61.177.7.1"
client-to-client
duplicate-cn
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3


启动服务



配置客户端

client
proto udp
dev tun
remote 服务器外网地址 1194
ca ca.crt
;cert client1.crt
;key client1.key
dh dh1024.pem
keepalive 10 120
comp-lzo
comp-noadapt
;user daemon
;group daemon
persist-key
persist-tun
status openvpn-status.log
verb 3
auth-user-pass


运行OpenVPN GUI

,点击connect



配置内网访问

这里只介绍在需要访问的机器不多的情况,在需要访问的机器上加上

route add 10.88.99.0 mask 255.255.255.0 服务器内网IP

然后直接ping该机器的内网IP,就可以ping通了。








    发表评论


热门标签


热门文章

最新文章