xref: /DragonOS/tools/qemu/ifup-nat (revision dfe53cf087ef4c7b6db63d992906b062dc63e93f)
1#!/bin/bash
2# 设置 bridge 名称
3BRIDGE=dragonos-bridge
4# 设置网络信息
5NETWORK=192.168.137.0
6NETMASK=255.255.255.0
7GATEWAY=192.168.137.1
8DHCPRANGE=192.168.137.100,192.168.137.200
9# 启用PXE支持的可选参数
10TFTPROOT=
11BOOTP=
12
13function check_bridge()
14{
15        if brctl show | grep "^$BRIDGE" &> /dev/null; then
16                return 1
17        else
18                return 0
19        fi
20}
21
22function create_bridge()
23{
24        brctl addbr "$BRIDGE"
25        brctl stp "$BRIDGE" on
26        brctl setfd "$BRIDGE" 0
27        ifconfig "$BRIDGE" "$GATEWAY" netmask "$NETMASK" up
28}
29
30function enable_ip_forward()
31{
32        echo 1 > /proc/sys/net/ipv4/ip_forward
33}
34
35function add_filter_rules()
36{
37        iptables -t nat -A POSTROUTING -s "$NETWORK"/"$NETMASK" \
38                ! -d "$NETWORK"/"$NETMASK" -j MASQUERADE
39}
40
41function start_dnsmasq()
42{
43# 禁止重复运行dnsmasq
44        ps -ef | grep "dnsmasq" | grep -v "grep" &> /dev/null
45        if [ $? -eq 0 ]; then
46                echo "dnsmasq 已经在运行"
47                return 1
48        fi
49        dnsmasq \
50                --strict-order \
51                --except-interface=lo \
52                --interface=$BRIDGE \
53                --listen-address=$GATEWAY \
54                --bind-interfaces \
55                --dhcp-range=$DHCPRANGE \
56                --conf-file="" \
57                --pid-file=/var/run/qemu-dhcp-$BRIDGE.pid \
58                --dhcp-leasefile=/var/run/qemu-dhcp-$BRIDGE.leases \
59                --dhcp-no-override \
60                ${TFTPROOT:+"--enable-tftp"} \
61                ${TFTPROOT:+"--tftp-root=$TFTPROOT"} \
62                ${BOOTP:+"--dhcp-boot=$BOOTP"}
63}
64
65function setup_bridge_nat()
66{
67        check_bridge "$BRIDGE"
68        if [ $? -eq 0 ]; then
69                create_bridge
70        fi
71        enable_ip_forward
72        add_filter_rules "$BRIDGE"
73        start_dnsmasq "$BRIDGE"
74}
75
76# 安装前需要检查$1参数
77if [ -n "$1" ]; then
78        setup_bridge_nat
79        brctl addif "$BRIDGE" "$1"
80        ifconfig "$1" 0.0.0.0 up
81        exit 0
82else
83        echo "发现错误:没有指定接口"
84        exit 1
85fi
86