Skip to content

Instantly share code, notes, and snippets.

@googya
Last active October 7, 2022 01:43
Show Gist options
  • Save googya/995967945741959e127ba57bb8645d33 to your computer and use it in GitHub Desktop.
Save googya/995967945741959e127ba57bb8645d33 to your computer and use it in GitHub Desktop.
install wireguard on centos

on server

add private key

wg genkey  | tee my_private | wg pubkey > my_public # both for Client and Server
ip link add wg0 type wireguard
ip addr add 192.168.2.2/24 dev wg0
wg set wg0 private-key ./my_private # server's private key
ip link set wg0 up

add peer

wg set wg0 peer #{client_public_key} allowed-ips 192.168.2.0/24 endpoint  106.13.13.13:38371 persistent-keepalive 15

remove peer

sudo wg set wg0 peer #{client_public_key} remove
# 抓包
tcpdump -i wg0 -nn
tcpdump -i wg0 -nn icmp

on client

[Interface]
Address = #{client_ip}
PrivateKey = #{client_private_key}

[Peer]
# 此 key 为 服务端的 public key
PublicKey = #{server_public_key}
AllowedIPs = #{allowed_ips}
Endpoint = server_id:port
PersistentKeepalive = 21

upgrade kernel

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

rpm -Uvh https://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm

# 注意是 lt long time support, ml 指的是 main line 最新版本, 保险起见, 不用最新的
yum --enablerepo=elrepo-kernel install kernel-lt

yum --enablerepo=elrepo-kernel -y swap kernel-headers -- kernel-lt-headers

yum --enablerepo=elrepo-kernel -y swap kernel-tools-libs -- kernel-lt-tools-libs

yum --enablerepo=elrepo-kernel -y install kernel-lt-tools

yum --enablerepo=elrepo-kernel -y swap kernel-devel -- kernel-lt-devel

yum -y remove kernel

# 查看内核版本
sudo awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg

# 设置默认项, 4.4 之类的
sudo grub2-set-default 0
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
sudo reboot

install wireguard

# install copr
yum install yum-plugin-copr
sudo yum copr enable jdoss/wireguard
sudo yum install epel-release wireguard-dkms wireguard-tools

iptables 相关操作(主要检查 NAT 机器)

当出现能 ping 通, 但是不能访问对应服务的时候, 多半需要检查服务器上的防火墙规则。

有些服务器的默认防火墙规则会禁止 NAT 操作, 比如 ping 之类的.

iptables -S | grep icmp-host-prohibited # 查找对应的 规则
iptables -L --line-numbers | grep icmp-host-prohibited # 列出对应的规则, 找到编号
iptables -D INPUT num1 # 删除 INPUT 规则
ipdatles -D FORWARD num2 # 删除 FORWARD 规则

增加路由

# 增加路由规则
ip route add 192.168.1.0/24 via 192.168.1.19 dev ens160

# 生效
sudo service network restart

防火墙

# add rule
firewall-cmd --permanent --add-port=port_number/tcp
# reload
firewall-cmd --reload

# stop
systemctl stop firewalld.service

# disable
systemctl disable firewalld.service

问题

  1. 为什么不连 VPN 的时候, 都不能访问作为内网网关的服务器(关闭掉内网网关上的 wg0 后, 又能访问)?
  2. 能 ping 通, 但提示 no route to host
    1. 出现该问题, 要检查防火墙的配置

参考:

How to install kernel 4.x on CentOS 7.x

How to Upgrade the Linux Kernel on CentOS 7

WireGuard Setup 的配置项

Centos6.5 升级完内核到3.10后, 无法安装kernel-devel

ICMP host unreachable - admin prohibited

@googya
Copy link
Author

googya commented Jan 29, 2020

@hankouyu
Copy link

hankouyu commented Oct 7, 2022

确保所有出站的数据包都通过VPN进行NAT转发:

iptables -t nat -I POSTROUTING 1 -s 10.0.0.0/24 -o eth0 -j MASQUERADE

允许wg0 接口上的所有流量:

iptables -I INPUT 1 -i wg0 -j ACCEPT

允许数据包通过WireGuard 服务器进行路由:

iptables -I FORWARD 1 -i eth0 -o wg0 -j ACCEPT
iptables -I FORWARD 1 -i wg0 -o eth0 -j ACCEPT

打开WireGuard 所使用的UDP端口51820:

iptables -I INPUT 1 -i eth0 -p udp --dport 51820 -j ACCEPT

打开IP转发(ipv4):

sysctl -w net.ipv4.ip_forward=1

pfSense使用WireGuard与VPS建立点对点连接,实现VPN策略

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment