@@ -46,6 +46,9 @@ fn main() -> Result<()> {
46
46
if !d. delay . is_zero ( ) {
47
47
dev. delay ( & d. delay , & d. jitter ) ?
48
48
}
49
+ if c. nat . is_some ( ) {
50
+ dev. add_resolv_conf ( ) ?
51
+ }
49
52
}
50
53
if let Some ( nat) = c. nat {
51
54
run_command ( TRACE , [ "iptables" ,
@@ -62,7 +65,11 @@ fn main() -> Result<()> {
62
65
let c: Config = toml:: from_slice ( & t) ?;
63
66
let b = Bridge :: new ( & c. bridge . name , c. bridge . cidr ) ;
64
67
for d in c. device {
65
- Device :: new ( & d) . delete ( ) ?
68
+ let dev = Device :: new ( & d) ;
69
+ if c. nat . is_some ( ) {
70
+ dev. del_resolv_conf ( ) ?
71
+ }
72
+ dev. delete ( ) ?;
66
73
}
67
74
b. delete ( ) ?;
68
75
if let Some ( nat) = c. nat {
@@ -113,6 +120,42 @@ impl Device {
113
120
] )
114
121
}
115
122
123
+ fn add_resolv_conf ( & self ) -> Result < ( ) > {
124
+ const RESOLV_CONF : & str = "nameserver 1.1.1.1\n nameserver 8.8.8.8\n " ;
125
+
126
+ let dir = PathBuf :: from ( format ! ( "/etc/netns/{}" , self . space) ) ;
127
+ if !dir. exists ( ) {
128
+ if TRACE {
129
+ eprintln ! ( "> creating {dir:?}" )
130
+ }
131
+ fs:: create_dir_all ( & dir) ?
132
+ }
133
+ let file = dir. join ( "resolv.conf" ) ;
134
+ if TRACE {
135
+ eprintln ! ( "> writing {file:?}" )
136
+ }
137
+ fs:: write ( file, RESOLV_CONF ) ?;
138
+ Ok ( ( ) )
139
+ }
140
+
141
+ fn del_resolv_conf ( & self ) -> Result < ( ) > {
142
+ let dir = PathBuf :: from ( format ! ( "/etc/netns/{}" , self . space) ) ;
143
+ if dir. exists ( ) {
144
+ let file = dir. join ( "resolv.conf" ) ;
145
+ if file. exists ( ) {
146
+ if TRACE {
147
+ eprintln ! ( "> removing {file:?}" )
148
+ }
149
+ fs:: remove_file ( file) ?
150
+ }
151
+ if TRACE {
152
+ eprintln ! ( "> removing {dir:?}" )
153
+ }
154
+ fs:: remove_dir ( dir) ?
155
+ }
156
+ Ok ( ( ) )
157
+ }
158
+
116
159
fn delete ( self ) -> Result < ( ) > {
117
160
run_command ( TRACE , [ "ip" , "link" , "delete" , & self . name ] ) ?;
118
161
run_command ( TRACE , [ "ip" , "netns" , "delete" , & self . space ] )
0 commit comments