Openwrt的在pppd上遇到的resolv.conf.auto问题

当有多个wan口时,有线的wan口与ppp拨号形成的wan口,在域名解析文件/tmp/resolv.conf.auto会有冲突。导致某个网卡无法正确解析域名。

为了解决此问题,在pppd文件夹下的ipcp.c,修改pppd拨号成功后,不仅向resolv.conf.ppp,也向resolv.conf.auto中写nameserver,并且是继续写入,而非覆盖。


找到下面的函数,其中,_PATH_RESOLV代表前者,_PATH_RESOLV_AUTO1代表后者。

fprintf的参数为w,表示写入覆盖,为a表示继续写入,不覆盖。


/*
 * create_resolv - create the replacement resolv.conf file
 */
static void
create_resolv(peerdns1, peerdns2)
    u_int32_t peerdns1, peerdns2;
{
   
    FILE *f;


    f = fopen(_PATH_RESOLV, "w");
    if (f == NULL) {
error("Failed to create %s: %m", _PATH_RESOLV);
return;
    }

fprintf(f, "# Interface pppd\n"); 

    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);


f = fopen(_PATH_RESOLV_AUTO1, "a");
if (f == NULL) {
error("Failed to create %s: %m", _PATH_RESOLV_AUTO1);
return;
}


fprintf(f, "# Interface pppd\n"); 


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_AUTO1);


fclose(f);

你可能感兴趣的:(openwrt)