# VPN
# PPTP
TCP: 1723
# Windows
修改windows系统PPTP连接使用的MTU值
netsh interface ipv4 show interfaces
netsh interface ipv4 set subinterface "31" mtu=1396 store=persistent
路由表解释
route print -4
删除默认设置
route delete 0.0.0.0
内网路由,192.168.10.245为VPN网关
route add 192.168.11.0 mask 255.255.255.0 192.168.10.245 –p
Windows登录自动化 PPTP (opens new window)
ipconfig | findstr /n 172\.17\.0\.[0-9]*
IF NOT ERRORLEVEL 1 (
ipconfig | findstr /n 192\.168\.10\.[0-9]*
IF ERRORLEVEL 1 (
echo AT COMPANY AND NO PPTP.
rasdial <VPN NAME> <USERNAME> <PASSWORD>
route ADD 10.0.0.0 MASK 255.0.0.0 10.4.90.1
)
)
# CentOS 7
检查是否支持PPTP,满足一条即可
modprobe ppp-compress-18 && echo ok #返回OK
zgrep MPPE /proc/config.gz #返回CONFIG_PPP_MPPE=y 或 =m
cat /dev/net/tun #返回cat: /dev/net/tun: File descriptor in bad state
安装 PPP,pptpd
yum install -y ppp
yum install -y epel-release
yum install -y pptpd
修改dns信息
$ vi /etc/ppp/options.pptpd
ms-dns 119.29.29.29
ms-dns 114.114.114.114
nologfd
logfile /var/log/pptpd.log
vpn 账户密码
$ vi /etc/ppp/chap-secrets
admin pptpd password * # VPN账号 + 服务类型 + VPN密码 + IP
设置VPN内网IP段
$ vi /etc/pptpd.conf
localip 192.168.0.1 # 服务器的内部网关地址
remoteip 172.16.1.100-110 # 分配给客户端的地址,一般是内网网段地址
修改内核参数支持内核转发
$ vi /etc/sysctl.conf
net.ipv4.ip_forward=1
$ sysctl -p
cat /proc/sys/net/ipv4/ip_forward
日志
# 1、上线日志
vi /etc/ppp/ip-up
echo "$PEERNAME 分配IP: $5 登录IP: $6 登录时间: `date -d today +%F_%T`" >> /var/log/pptpd.log
# 2、下线日志
vi /etc/ppp/ip-down
echo "$PEERNAME 下线IP: $6 下线时间: `date -d today +%F_%T`" >> /var/log/pptpd.log
设置最大传输单元
vi /etc/ppp/ip-up
# exit 0 行前添加
ifconfig $1 mtu 1450
iptables -A FORWARD -p tcp --syn -s 10.0.0.0/24 -j TCPMSS --set-mss 1396
iptables -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
NAT 转发
# 192.168.9.0/24,取决于你 /etc/pptpd.conf 里的 local IP,表示的是你 VPN 客户端分配的 IP 段.
sudo iptables -A INPUT -p gre -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 1723 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
# iptables -t nat -A POSTROUTING -s 192.168.0.0/255.255.255.0 -o eth0 -j SNAT --to-source 172.27.0.15
netstat -tunlp | grep 1723
# /etc/rc.d/rc.local 自启
# openconnect
# nebula
- nebula (opens new window)
- 让 Nebula 可以在 Windows 下作为服务自启动 (opens new window)
- nebula 简单教程 (opens new window)
- nebula初探 (opens new window)
下载 nebula
wget https://github.com/slackhq/nebula/releases/download/v1.2.0/nebula-linux-amd64.tar.gz
tar -zxvf nebula-linux-amd64.tar.gz
生成主证书 CA,后面所有节点证书都是这个主证书签名的,这个命令将生成 ca.crt 与 ca.key
./nebula-cert ca -name "home-sh"
为各节点签发证书,分别为lighthouse、buf、win10
./nebula-cert sign -name "lighthouse" -ip "192.168.250.1/24"
./nebula-cert sign -name "win10" -ip "192.168.250.3/24" -groups "g1, g2"
./nebula-cert sign -name "buf" -ip "192.168.250.100/24" -groups "g1, g2"
配置文件集中管理
mkdir /etc/nebula
cp ca.crt /etc/nebula
cp lighthouse.* /etc/nebula/
生成一个配置文件
https://github.com/slackhq/nebula/blob/master/examples/config.yml
vi /etc/nebula/lighthouse-config.yaml
内容如下
pki:
ca: /etc/nebula/ca.crt
cert: /etc/nebula/lighthouse.crt
key: /etc/nebula/lighthouse.key
static_host_map:
"192.168.250.1": ["lighthouse1.example.com:4242"]
lighthouse:
am_lighthouse: true #这行只有“灯塔”才有
interval: 60
# 以下两行一定要注释掉
#hosts:
# - "192.168.250.1"
listen:
host: 0.0.0.0
port: 4242
punchy:
punch: true
respond: true
tun:
# 网卡名字
dev: nbl
drop_local_broadcast: false
drop_multicast: false
tx_queue: 500
mtu: 1300
routes:
#- mtu: 8800
# route: 10.0.0.0/16 #这里可以分发路由表,一行聚合不了的可以写多行,下面的覆盖上面的
logging:
level: info
format: text
firewall:
conntrack:
tcp_timeout: 120h
udp_timeout: 3m
default_timeout: 10m
max_connections: 100000
outbound:
# 放开所有出站
- port: any
proto: any
host: any
inbound:
# 放开各节点所有流量,这里可以有不同的粒度,甚至有类似云主机那种安全组的概念
- port: any
proto: any
host: any
运行
./nebula -config /etc/nebula/lighthouse-config.yaml