Initialize correctly the bridge interface
To initialize the bridge interface correctly we need to do the following: 1) duplicate the IPs of INTERNET_IFACE to BRIDGE_IFACE 2) duplicate routing table of INTERNET_IFACE to BRIDGE_IFACE 3) delete routing table of INTERNET_IFACE NOTE: we don't need to delete the IPs of INTERNET_IFACE We need the above because BRIDGE_IFACE is the master interface from now on and it must know where is connected, otherwise connection is lost. Fix #19
This commit is contained in:
parent
0ba638f780
commit
6a3e1d98ab
48
create_ap
48
create_ap
@ -345,6 +345,16 @@ cleanup() {
|
||||
iptables -D FORWARD -i ${INTERNET_IFACE} -d ${GATEWAY%.*}.0/24 -j ACCEPT > /dev/null 2>&1
|
||||
[[ -n $OLD_IP_FORWARD ]] && echo $OLD_IP_FORWARD > /proc/sys/net/ipv4/ip_forward
|
||||
elif [[ "$SHARE_METHOD" == "bridge" ]]; then
|
||||
ip route show dev $BRIDGE_IFACE | grep -v -E '^default' | while read x; do
|
||||
ip route del $x dev $BRIDGE_IFACE
|
||||
ip route add $x dev $INTERNET_IFACE
|
||||
done
|
||||
|
||||
ip route show dev $BRIDGE_IFACE | grep -E '^default' | while read x; do
|
||||
ip route del $x dev $BRIDGE_IFACE
|
||||
ip route add $x dev $INTERNET_IFACE
|
||||
done
|
||||
|
||||
ip link set down $BRIDGE_IFACE
|
||||
brctl delbr $BRIDGE_IFACE
|
||||
[[ -n $OLD_BRIDGE_IPTABLES ]] && echo $OLD_BRIDGE_IPTABLES > /proc/sys/net/bridge/bridge-nf-call-iptables
|
||||
@ -686,7 +696,45 @@ if [[ "$SHARE_METHOD" != "none" ]]; then
|
||||
# create and initialize bridged interface
|
||||
brctl addbr ${BRIDGE_IFACE} || die
|
||||
brctl addif ${BRIDGE_IFACE} ${INTERNET_IFACE} || die
|
||||
|
||||
# to initialize the bridge interface correctly we need to do the following:
|
||||
#
|
||||
# 1) duplicate the IPs of INTERNET_IFACE to BRIDGE_IFACE
|
||||
# 2) duplicate routing table of INTERNET_IFACE to BRIDGE_IFACE
|
||||
# 3) delete routing table of INTERNET_IFACE
|
||||
# NOTE: we don't need to delete the IPs of INTERNET_IFACE
|
||||
#
|
||||
# we need the above because BRIDGE_IFACE is the master interface from now on
|
||||
# and it must know where is connected, otherwise connection is lost.
|
||||
ip link set dev ${BRIDGE_IFACE} up || die
|
||||
|
||||
ip addr show $INTERNET_IFACE | grep -E '[[:blank:]]+inet ' | while read x; do
|
||||
IPADDR=$(echo $x | sed 's/inet \([^ ]*\).*/\1/')
|
||||
BRDADDR=
|
||||
if [[ $x == *\ brd\ * ]]; then
|
||||
BRDADDR=$(echo $x | sed 's/.* brd \([^ ]*\).*/\1/')
|
||||
fi
|
||||
if [[ -n "$BRDADDR" ]]; then
|
||||
ip addr add $IPADDR broadcast $BRDADDR dev $BRIDGE_IFACE || die
|
||||
else
|
||||
ip addr add $IPADDR dev $BRIDGE_IFACE || die
|
||||
fi
|
||||
done
|
||||
|
||||
# remove any existing entries that were added from 'ip addr add'
|
||||
ip route flush dev $BRIDGE_IFACE || die
|
||||
|
||||
# we must first add the entries that specify the subnets and then the
|
||||
# gateway entry, otherwise 'ip addr add' will return an error
|
||||
ip route show dev $INTERNET_IFACE | grep -v -E '^default' | while read x; do
|
||||
ip route del $x dev $INTERNET_IFACE || die
|
||||
ip route add $x dev $BRIDGE_IFACE || die
|
||||
done
|
||||
|
||||
ip route show dev $INTERNET_IFACE | grep -E '^default' | while read x; do
|
||||
ip route del $x dev $INTERNET_IFACE || die
|
||||
ip route add $x dev $BRIDGE_IFACE || die
|
||||
done
|
||||
fi
|
||||
else
|
||||
echo "No Internet sharing"
|
||||
|
Loading…
Reference in New Issue
Block a user