Я испытываю затруднения при получении старого сценария, работающего снова в 16,04 после того, как dist-обновление, предыдущая установка была 14.04. Этот сценарий настраивает сетевое пространство имен для изоляции программ от основного сетевого интерфейса.
Быстрая схема какой, как предполагается, происходит:
ns1
.veth1
и vpeer1
vpeer1
к сетевому пространству имен ns1
veth1
и поднимите егоvpeer1
, поднимите его.lo
на сетевом пространстве имен ns1
ip_forwarding
к 1FORWARD
кому: DROP
и сброс, сброс iptables туземный.#!/usr/bin/env bash
set -x
NS="ns1"
VETH="veth1"
VPEER="vpeer1"
VETH_ADDR="10.200.1.1"
VPEER_ADDR="10.200.1.2"
if [[ $EUID -ne 0 ]]; then
echo "You must be root to run this script"
exit 1
fi
# Remove namespace if it exists.
ip netns del $NS &>/dev/null
# Create namespace
ip netns add $NS
# Create veth link.
ip link add ${VETH} type veth peer name ${VPEER}
# Add peer-1 to NS.
ip link set ${VPEER} netns $NS
# Setup IP address of ${VETH}.
ip addr add ${VETH_ADDR}/24 dev ${VETH}
ip link set ${VETH} up
# Setup IP ${VPEER}.
ip netns exec $NS ip addr add ${VPEER_ADDR}/24 dev ${VPEER}
ip netns exec $NS ip link set ${VPEER} up
ip netns exec $NS ip link set lo up
ip netns exec $NS ip route add default via ${VETH_ADDR}
# Enable IP-forwarding.
echo 1 > /proc/sys/net/ipv4/ip_forward
# Flush forward rules.
iptables -P FORWARD DROP
iptables -F FORWARD
# Flush nat rules.
iptables -t nat -F
# Enable masquerading of 10.200.1.0.
iptables -t nat -A POSTROUTING -s ${VPEER_ADDR} -o p119p1 -j MASQUERADE
iptables -A FORWARD -i p119p1 -o ${VETH} -j ACCEPT
iptables -A FORWARD -o p119p1 -i ${VETH} -j ACCEPT
p119p1 является моим адаптером Ethernet, изменением в любом, Ваш для тестирования.
Протестировать это соединение, когда операционный, ip netns exec ns1 ping 8.8.8.8
если это проверяет с помощью ping-запросов, это работает.
Когда выполнено как сценарий с yourscript.sh
как корень, это не работает над 16,04. В 14,04 это действительно работало. При ручном вводе, строка для строки как корень (замена $ {переменные} при необходимости), это действительно работает над 16,04.
Я уверен, что не наткнулся на главный системный дефект, и я делаю что-то не так по сравнению со старым дистрибутивом. Моя ошибка, когда выполнено как сценарий, в основном это жалуется "Узел назначения, Недостижимый", по некоторым причинам это пропускает присвоение IP к veth1, когда выполнено как сценарий. Рассуждайте неизвестный мне.
Когда рабочие программы могут быть запущены в пространстве имен. Используя ip netns exec ns1 <command>
. Разрешение того разделить отдельные программы на их собственную сеть VPN, также с помощью VPN в пространстве имен.