В качестве примера возьмем следующие исходные данные:
1. Вы находитесь в сети 192.168.0.0/24
2. Хотите расшарить интернет на все PC в данной сети, для которой ваш PC указан как роутер.
nat_iface="tun0" - интерфейс созданный при подключении к впн серверу
nat_address=`ip addr show $nat_iface | grep inet | awk '{print$2}'` - адрес на vpn интерфейсе, из под которого все идут в интернеты
local_address="192.168.0.100" - ваш локальный адрес
local_net="192.168.0.0"
sysctl net.ipv4.ip_forward=1
iptables -P FORWARD ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -i ${nat_iface} -j ACCEPT
iptables -A OUTPUT -o ${nat_iface} -j ACCEPT
iptables -A INPUT -s 0/0 -d $nat_address/32 -j ACCEPT
iptables -A OUTPUT -s ${nat_address}/32 -d 0/0 -j ACCEPT
iptables -t mangle -A POSTROUTING -d 10.0.0.0/8 -j MARK --set-mark 1
iptables -t mangle -A POSTROUTING -d 192.168.0.0/16 -j MARK --set-mark 1
iptables -t mangle -A POSTROUTING -d 89.249.48.0/20 -j MARK --set-mark 1
iptables -t nat -A POSTROUTING -m mark ! --mark 1 -s ${local_address}/32 -j SNAT --to-source ${nat_address}
iptables -t nat -A POSTROUTING -m mark ! --mark 1 -s ${local_net}/24 -j SNAT --to-source ${nat_address}
предпоследняя строчка для конкретно вашего Pc, последняя для всей сети, если всей сети ненадо давать доступ, то можно добавить еще одну строчку по аналогии с предпоследней, но в качестве переменной $local_address нужно указать конкретный адрес которому хотите разрешить пользоваться интернетом.
Строчки в таблице mangle нужны для того чтобы по локальным адресам вы не ходили через впн соединение, но для этого надо будет добавить маршруты на эти сети, если у вас адрес прописан статически, при динамическом получении адреса маршруты должны прийти от сервера DHCP.
Если что-то не понятно, спрашивайте, постараюсь ответить.