记录如何快速搭建一个 VPN

当然用 docker。

docker pull fcojean/l2tp-ipsec-vpn-server

参考文档安装即可:https://hub.docker.com/r/fcojean/l2tp-ipsec-vpn-server 。 它帮你把 /etc/sysctl.conf 什么的都配好了,只要注意给特殊权限就能启动,很重要的一点是,宿主机需要:

modprobe af_key

docker-compose 例子:

  vpn:
    image: fcojean/l2tp-ipsec-vpn-server
    privileged: true
    environment:
      VPN_DNS1: dns  # optional
      VPN_IPSEC_PSK: x
      VPN_USER_CREDENTIAL_LIST: |
        [
          {"login": "q", "password": "1"},
          {"login": "w", "password": "2"}
        ]
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /lib/modules:/lib/modules:ro
    ports: 
      - 500:500/udp
      - 4500:4500/udp

  # optional
  dns:
    image: andyshinn/dnsmasq

macOS 可以用,连上后,可选发送所有流量,也可自定义路由:

route add 10.1.0.0/24 192.168.42.1
route delete 10.1.0.0/24

Linux:

ipsec up myvpn
echo "c myvpn" > /var/run/xl2tpd/l2tp-control

ip route add 10.1.0.0/24 via 192.168.42.1
ip route del 10.1.0.0/24

echo "d myvpn" > /var/run/xl2tpd/l2tp-control
ipsec down myvpn

参考:https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/clients-zh.md

另外,可以 dnsmasq 负责解析 compose/k8s 的内部域名,vpn 服务设置环境变量 VPN_DNS1: dns,用户拨号上去后,即可完全融入其中的环境,非常方便开发。

sshuttle

https://github.com/sshuttle/sshuttle, poor man's VPN, VPN over ssh.

sshuttle --dns -r hk.remote 0/0
# or
sshuttle --dns -r work.remote 192.168.0.0/16 172.16.0.0/12 10.0.0.0/8

# sudo no password
chmod +s $(which sshuttle)

compose/k8s 上面可以搭建一个 sshd,sshuttle 连上去后可以融入环境,效果和作用和上面一样,额外还能打隧道,参考 lwzm/sshd https://hub.docker.com/repository/docker/lwzm/sshd

打算以 app.namespace 的方式访问 k8s 的服务,需要注意配置 /etc/resolv.conf: search svc.cluster.xxx