修改pppd拨号软件的DNS保存路劲以及/etc/resolv.conf文件DNS会被覆盖问题

目的

在arm板中,pppd拨号软件获取的DNS会保存到/etc/resolv.conf,这会覆盖网口和wifi的DNS配置,从而使他们不能正常访问域名,所以要修改pppd拨号软件的源码,改不DNS写入的路劲或者写入方式改为追加,这里使用的是修改保存路劲,因为网口和wifi上网同样会覆盖4G上网的DNS配置,所以单独弄个文件/etc/4G_DNS.conf保存,然后写个程序检查/etc/resolv.conf,对比/etc/4G_DNS.conf和/etc/resolv.conf的内容,/etc/resolv.conf没有/etc/4G_DNS.conf的DNS就把/etc/4G_DNS.conf追加到/etc/resolv.conf。
这里以荣品电子的T507开发板为例

一.从源码中找到pppd源码,修改DNS写入路劲

find命令查找

root@ubuntu:/home/mywork/system# find ./ -name "pppd*"

在./out/t507/demo2.0/longan/buildroot/build/pppd-2.4.7目录
在这里插入图片描述
进到源码查找/etc/resolv.conf

# grep "/etc/resolv.conf" ./ -R

在这里插入图片描述
修改这个文件./pppd/pathnames.h
修改改为,把原来的注释,重新添加需要保存的路劲
在这里插入图片描述

二.修改写入方式

如果需要改写入方式则修改pppd/ipcp.c文件即可,修改这个文件的这个位置即可,我的实际应用中并没有追加写入,追加显示可能会导致/etc/resolv.conf有多个DNS,这样解析域名速速度可能会变慢,这里只做介绍

static void 
create_resolv(peerdns1, peerdns2)
    u_int32_t peerdns1, peerdns2;
{
    FILE *f;
        notice("nameserver============================%s",_PATH_RESOLV);
    f = fopen(_PATH_RESOLV, "w");
    if (f == NULL) {
        error("Failed to create %s: %m", _PATH_RESOLV);
        return;
    }    

    if (peerdns1)
        fprintf(f, "nameserver %s\n", ip_ntoa(peerdns1));

    if (peerdns2)
        fprintf(f, "nameserver %s\n", ip_ntoa(peerdns2));

    if (ferror(f))
        error("Write failed to %s: %m", _PATH_RESOLV);

    fclose(f);
}

只需要把文件打开方式改一下就是,如果文件以只写方式打开会被情况,如果是读写的方式打开就不会被清空了,修改为覆盖写入/etc/4G_DNS.conf,追加写入 /etc/resolv.conf
修改之后_PATH_RESOLV等于/etc/4G_DNS.conf

static void 
create_resolv(peerdns1, peerdns2)
    u_int32_t peerdns1, peerdns2;
{
    FILE *f;
    FILE *f2;
        notice("nameserver============================%s",_PATH_RESOLV);
    f = fopen(_PATH_RESOLV, "w");
    if (f == NULL) {
        error("Failed to create %s: %m", _PATH_RESOLV);
        return;
    }    

    if (peerdns1)
        fprintf(f, "nameserver %s\n", ip_ntoa(peerdns1));

    if (peerdns2)
        fprintf(f, "nameserver %s\n", ip_ntoa(peerdns2));

    if (ferror(f))
        error("Write failed to %s: %m", _PATH_RESOLV);

    fclose(f);
    //=======================================================
    f2 = fopen("/etc/resolv.conf", "rt+");
    if (f2 == NULL) {
        error("Failed to create %s: %m","/etc/resolv.conf");
        return;
    }    
    if (peerdns1)
        fprintf(f2, "nameserver %s\n", ip_ntoa(peerdns1));
        
    if (peerdns2)
        fprintf(f2, "nameserver %s\n", ip_ntoa(peerdns2));
        
    if (ferror(f2))
        error("Write failed to %s: %m","/etc/resolv.conf");
        
    fclose(f2);
}

三.编译

需要回到下面的这个路劲执行make pppd-rebuild
在这里插入图片描述

root@ubuntu:/home/mywork/system/bak507/out/t507/demo2.0/longan/buildroot# make pppd-rebuild

对应的清空命令是make pppd-dirclean
清空会把整个文件夹删除掉

四.最后的补充,最好的解决方案

因为通过测试发现,4G的DNS虽然写到的/etc/4G_DNS.conf,后面再写到/etc/resolv.conf,但是T507的dhcp服务会把wifi和网口的DNS覆盖到/etc/resolv.conf,导致4G的DNS无法正常使用,最后通过创建/etc/resolv.conf.tail文件,把4G的DNS写到这个文件,这样T507的DHCP服务在写/etc/resolv.conf的时候会把/etc/resolv.conf.tail文件的内容追加到/etc/resolv.conf文件,完美的解决的各个网卡间DNS文件覆盖的问题

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值