类库大魔王的日常

一本流水帐

各种吐槽,倒苦水,开坑,立Flag。毫无营养,慎入!


C++/Go, Windows/Linux/macOS, iOS/Android, server/client development

OpenVPN同时监听TCP和UDP端口

在路由器上部署了全局翻墙后,出于简化部署的考虑,我把接在路由器后的一个Raspberry Pi作为VPN server,部署了OpenVPN,然后再在路由器上设置端口映射,可以从外网连回Raspberry Pi。这个方案有几个好处:

  • OpenVPN相比PPTP等,自定义协议和端口更灵活方便
  • 可以从Raspberry Pi直接从路由器连出上网,享受翻墙的便利
  • VPN和翻墙都是要改iptables的,分开在两个设备上可以简化设置

之前用的是TCP协议,因为公司网络可能出于安全角度考虑,封禁了常见VPN协议的默认端口和协议,UDP也被封了。虽然用TCP协议连回去也工作得很正常,但我还是想在可以的时候使用UDP协议连上Raspberry Pi,比如在运营商并不对UDP协议强力QoS时,OpenVPN over UDP会有较小的latency。

要让OpenVPN同时监听TCP和UDP端口方法不止一种,我用了最简单的办法。把/etc/openvpn/server.conf复制一份,比如/etc/openvpn/udp.conf,然后修改udp.conf

  • 协议修改为UDP:proto udp
  • IP地址修改略作修改,比如所有原来是10.8.0.x的地方,都改为10.8.1.x

然后修改iptables,增加一条nat规则-A POSTROUTING -s 10.8.1.0/24 -o eth0 -j MASQUERADE。最后,再运行一个OpenVPN进程,通过命令行参数指定新的配置文件:

/usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --config /etc/openvpn/udp.conf

这样,就应该可以以UDP协议连上server了。

本文地址:

https://blog.minidump.info/2017/02/openvpn-both-tcp-and-udp/

上一篇

在家部署IPv6后续

之前在香蕉派上通过he.net的tunnel得到IPv6后,遗留下一个问题,二级路由器Netgear R6300v2刷了梅林固件后,不能分配内网IPv6地址,网上看也有人提出了相同的问题,后来在其他人的指点下,找到解决这个问题的几个办法。经过简单的比较,我的路由器在web管理界面上有一个web...…

network 全文阅读
下一篇

Go语言用表驱动替换if-else/switch-case/select-case

没心情给avege做新功能,就断断续续做些重构工作,用gocyclo看出来很多函数的圈复杂度都很高,常规的做法,除了把一个大函数拆成几个小函数外,还要对代码逻辑进行调整,比较可观的做法是把if-else,switch-case和select-case替换掉。Go对C的switch-case结构...…

Go 全文阅读