用nginx做udp代理解决ntp被封的问题
NTP端口被运营商封掉了,导致内网的机器都不能正常对时,用tcpdump发现可以往外发包,收不到回应,
自己写了一个测试程序发现服务器端可以收到123端口的udp包,回应收不到,一定是被运营商拦截了。
http://blog.csdn.net/mtour/article/details/41073525
参考这边文章,重新编译了ntp相关服务,tcpdump时发现发送的源端口确实变了,但一样收不到回应,只有另想方法。
于是想办法换一下端口,用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服务就可以了。