用nginx做udp代理解决ntp被封的问题

NTP端口被运营商封掉了,导致内网的机器都不能正常对时,用tcpdump发现可以往外发包,收不到回应,

自己写了一个测试程序发现服务器端可以收到123端口的udp包,回应收不到,一定是被运营商拦截了。

http://blog.csdn.net/mtour/article/details/41073525

参考这边文章,重新编译了ntp相关服务,tcpdump时发现发送的源端口确实变了,但一样收不到回应,只有另想方法。


用nginx做udp代理解决ntp被封的问题

于是想办法换一下端口,用nginx做一下udp端口转发:

1.在内网机器上部署nginx的udp转发:

stream {
    upstream ntp_upstreams {
        server 47.93.x.x:8123;
    }


    server {
        listen 123 udp;
        proxy_pass ntp_upstreams;
    }
}

意思是把到达本机的123端口的upd包转发到 server 47.93.x.x:8123;

stream {
    upstream ntp {
       server 127.0.0.1:123;
                 }
    server {
        listen 8123 udp;
        proxy_pass ntp;
    }
}

在服务器上配置,吧8123端口的udp包转发到本地123端口,服务器要启动ntp服务。

这样,本地机器就做成了一个ntp桥接,但是本地这个机器使用ntpdate 127.0.0.1是不行的,因为会有123端口冲突,用其他本地机器访问这个机器的ip作为ntp服务就可以了。